【问题标题】:unset item from array and update wp option从数组中取消设置项目并更新 wp 选项
【发布时间】:2014-05-31 13:45:26
【问题描述】:

我有一系列复选框,每个复选框都会触发 WordPress 中的 ajax 操作。它将一个 ID 号和复选框的状态发送到我的 php 函数。该函数检查两个 wp_options。如果选中该复选框,它会在一个选项的数组中查找 id 号,如果它不在数组中,则添加它。它还在第二个选项的数组中查找 id 号,如果它在数组中,则应该取消设置它。如果未选中该复选框,则相反。

它成功地将项目添加到第一个选项的数组中,但我无法让它从第二个选项的数组中取消设置项目。它每次都返回“错误”。这是函数,减去 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;
}

知道我做错了什么吗?

【问题讨论】:

    标签: php wordpress unset


    【解决方案1】:

    我解决了。需要使用 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 2015-10-30
      • 2014-06-09
      • 1970-01-01
      • 2020-04-05
      • 2015-07-08
      • 1970-01-01
      相关资源
      最近更新 更多