我有一系列复选框,每个复选框都会触发WordPress中的ajax操作。它向我的php函数发送一个id号和复选框的状态。该函数检查两个wp_options。如果复选框被选中,它会在一个选项的数组中查找id号,如果它不在数组中,它会添加它。它还会在第二个选项的阵列中查找id编号,如果它在数组中则应该取消设置。如果复选框未被选中,则会执行相反的操作。
它成功地将项目添加到第一个选项的数组中,但我无法让它从第二个选项的阵列中取消设置项目。它每次都返回"error"。这是函数,减去nonce信息:
function my_required_fields(){
$field = $_POST['field'];
$checked = $_POST['checked'];
$required_fields = get_option('ghsc_required_fields') ? unserialize(get_option('ghsc_required_fields')) : array();
$optional_fields = get_option('ghsc_optional_fields') ? unserialize(get_option('ghsc_optional_fields')) : array();
if($checked === 'yes'):
if(!in_array($field, $required_fields)): $required_fields[] = $field; endif;
if(in_array($field, $optional_fields)): unset($optional_fields[$field]); endif;
elseif($checked === 'no'):
if(!in_array($field, $optional_fields)): $optional_fields[] = $field; endif;
if(in_array($field, $required_fields)): unset($required_fields[$field]); $required_fields = array_values($required_fields); endif;
endif;
$update_required = update_option('ghsc_required_fields', serialize($required_fields));
$update_optional = update_option('ghsc_optional_fields', serialize($optional_fields));
$response = ($update_required && $update_optional) ? 'success' : 'error';
$response = json_encode($response); header( "Content-Type: application/json" ); echo $response; exit;
}
知道我做错了什么吗?
我解决了。需要使用array_keys(或其他选项)来取消设置键,而不是值,还需要检查选项的值是否发生了更改,因为如果没有,它将返回false。见下文:
function my_required_fields(){
$field = $_POST['field'];
$checked = $_POST['checked'];
$required_fields = get_option('ghsc_required_fields') ? unserialize(get_option('ghsc_required_fields')) : array();
$optional_fields = get_option('ghsc_optional_fields') ? unserialize(get_option('ghsc_optional_fields')) : array();
if($checked === 'yes'):
if(!in_array($field, $required_fields)): $required_fields[] = $field; endif;
if(in_array($field, $optional_fields)): foreach(array_keys($optional_fields, $field, true) as $key) unset($optional_fields[$key]); endif;
elseif($checked === 'no'):
if(!in_array($field, $optional_fields)): $optional_fields[] = $field; endif;
if(in_array($field, $required_fields)): foreach(array_keys($required_fields, $field, true) as $key) unset($required_fields[$key]); endif;
endif;
$update_required = (get_option('ghsc_required_fields') === serialize($required_fields) ? 1 : update_option('ghsc_required_fields', serialize($required_fields)));
$update_optional = (get_option('ghsc_optional_fields') === serialize($optional_fields) ? 1 : update_option('ghsc_optional_fields', serialize($optional_fields)));
$response = ($update_required && $update_optional) ? 'success' : 'error';
$response = json_encode($response); header( "Content-Type: application/json" ); echo $response; exit;
}