0

我有两个功能,一个是钩子,另一个是过滤器。钩子函数显示所有具有输入类型(复选框)的类别,这很简单。但是我在检查过滤器功能时遇到问题,它已更新并存储在数据库中,但是当我取消选中它时,我无法更新该字段以取消选中(要在数据库中更新)

下面是钩子函数的代码:

function my_account_add_extra_field_kategorija() {
    global $current_user;
    
    $taxonomy     = 'category';
    $orderby      = 'name'; 
    $show_count   = 1;      // 1 for yes, 0 for no
    $pad_counts   = 1;      // 1 for yes, 0 for no
    $hierarchical = 1;      // 1 for yes, 0 for no
    $title        = '';
    $fcats        = '';
    $i            = 0;
    $args = array(
    'taxonomy'     => $taxonomy,
    'orderby'      => $orderby,
    'show_count'   => $show_count,
    'pad_counts'   => $pad_counts,
    'hierarchical' => $hierarchical,
    'title_li'     => $title,
    'hide_empty'    => 0
    );
    $cats  = get_categories( $args );
    print '<ul>';
    foreach($cats as $cat){   if($cat->parent == 0){ $fcats .= $cat->cat_ID.",";
    $cat_name = $cat->cat_name;
    $userID = $current_user->ID;
    $get_meta_value = get_the_author_meta( $cat_name, $userID );
    if($i%2){ $ex ="space"; }else{ $ex =""; }
    if($i == 10){ print '<div class="clearfix"></div>'; $ex =""; $i=0;}
    
    print '<li>';       
    if($get_meta_value == 1 ) {
        print '<input type="checkbox" name="sel_cat[]" value="'.$cat_name.'" checked="checked" ';
        print '/>'.$cat_name;
    } else {
        print '<input type="checkbox" name="sel_cat[]" value="'.$cat_name.'" ';
        print '/>'.$cat_name;
    }
    print '</li>';
    $i++; } }
    print '</ul>';
    
    print '<div class="clearfix"></div>';

}

这是过滤器功能:

function my_account_update_extra_field_kategorija() {
global $current_user;
$user_id = $current_user->ID;
if(isset($_POST['sel_cat'])){
    foreach($_POST['sel_cat'] as $check) {
        update_user_meta($user_id, $check, '1');
    }
}
}
4

1 回答 1

1

由于复选框值仅在选中时提交(即无法指定未选中的值),因此您将不得不使用用于创建复选框的数据。然后,您可以通过将它们与提交(选中)的数据进行比较来判断哪些未选中。

由于您使用 [] (array) 命名复选框,因此这是最好的方法。

但是,如果您使用诸如 name="bob" 或 name="bob[1]" 之类的固定名称,那么使所有值可提交的最简单方法是在隐藏输入前面添加相同名称和未检查值。勾选复选框将覆盖隐藏的值。

IE

<input type="hidden" name="bob" value="0" />
<input type="checkbox" name="bob" value="1" />
于 2012-08-16T10:39:03.460 回答