WordPressの投稿画面でカテゴリーを選択するとき、子カテゴリーを持つ親カテゴリーは選択できないようにする。
調べたら何件か情報があったけど、どれも若干古くて動かなかったりしたのでWP最新版+php7でも動くように修正しました。
functions.phpに以下を記述(コピペでOK)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?php require_once(ABSPATH . '/wp-admin/includes/template.php'); class Nocheck_Category_Checklist extends Walker_Category_Checklist { function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) { extract($args); if ( empty( $taxonomy ) ) $taxonomy = 'category'; if ( $taxonomy == 'category' ) $name = 'post_category'; else $name = 'tax_input['.$taxonomy.']'; $class = in_array( $category->term_id, $popular_cats ) ? ' class="popular-category"' : ''; $cat_child = get_term_children( $category->term_id, $taxonomy ); if( !empty( $cat_child ) ) { $output .= "\n<li id='{$taxonomy}-{$category->term_id}'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="'.$name.'[]" id="in-'.$taxonomy.'-' . $category->term_id . '"' . checked( in_array( $category->term_id, $selected_cats ), true, false ) . disabled( empty( $args['disabled'] ), true, false ) . ' /> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>'; } else { $output .= "\n<li id='{$taxonomy}-{$category->term_id}'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="'.$name.'[]" id="in-'.$taxonomy.'-' . $category->term_id . '"' . checked( in_array( $category->term_id, $selected_cats ), true, false ) . disabled( empty( $args['disabled'] ), false, false ) . ' /> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>'; } } } function wp_category_terms_checklist_no_top( $args, $post_id = null ) { $args['checked_ontop'] = false; $args['walker'] = new Nocheck_Category_Checklist(); return $args; } add_action( 'wp_terms_checklist_args', 'wp_category_terms_checklist_no_top' ); |
これでよし。
古いコードで動かなかった原因は、phpのバージョンによる”extends”の仕様変更(引数のデフォルト値が同じじゃないとだめ)と、WPのバージョンに伴い”get_category_children()”という関数が使えなくなっていたからでした。
このコードも今は動いていますが、そのうち動かなくなる日が来るかもですね!
現場からは以上です。
いちばんやさしいWordPressの教本第3版 人気講師が教える本格Webサイトの作り方 (「いちばんやさしい教本」)