0

フックとフィルターの 2 つの機能があります。フック機能は、シンプルな入力タイプ(チェックボックス)ですべてのカテゴリを表示します。しかし、フィルター機能が更新されてDBに保存されていることを確認すると、フィルター機能に問題がありますが、チェックを外すと、そのフィールドを更新してチェックを外すことはできません(DBで更新されます)

フック関数のコードは次のとおりです。

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

チェックボックスの値はチェックされている場合にのみ送信されるため (つまり、チェックされていない値を指定する方法はありません)、チェックボックスの作成に使用したデータを使用する必要があります。次に、提出された (チェックされた) データと比較することで、どれがチェックされていないかを知ることができます。

チェックボックスに [] (配列) で名前を付けているため、これが最良の方法です。

ただし、name="bob" や name="bob[1]" などの固定名を使用した場合、すべての値を送信可能にする最も簡単な方法は、隠し入力の前に同じ名前とチェックされていない値を追加することです。チェックボックスをオンにすると、非表示の値が上書きされます。

すなわち

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