フックとフィルターの 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');
}
}
}