WordPress で記事のカテゴリーを設定する際、階層になっているカテゴリーで子カテゴリーにチェックしても親カテゴリーはチェックされません。
通常は、子カテゴリーは 親カテゴリーに含まれるケースが多いと思われます。この場合、子カテゴリ―と親カテゴリーの両方をチェックしないといけません。これでは、面倒だしチェックし忘れる可能性もあるので、自動でチェックさせたいと思います。既に同様の機能をもったプラグインもありましたが、ここでは、プラグインなしで実装してみたいとおもいます。
仕様
- 子カテゴリーがチェックされた場合、上階層のカテゴリーをチェックする。
- 子カテゴリーがチェック オフされたら場合、同階層のカテゴリーがすべてチェック オフなら、上階層のカテゴリーをチェック オフする。
- 親カテゴリーのチェック状態が変更された場合、子カテゴリーのチェック状態は元のまま変更しない。
実装には、JavaScript(jQuery) を用います。
category-parent-linkage.js
jQuery(function($) {
$('#taxonomy-category .children input').change(function() {
function parentNodes(checked, nodes) {
parents = nodes.parent().parent().parent().prev().children('input');
if (parents.length != 0) {
parents[0].checked = checked;
parentNodes(checked, parents);
}
}
var checked = $(this).is(':checked');
$(this).parent().parent().siblings().children('label').children('input').each(function() {
checked = checked || $(this).is(':checked');
})
parentNodes(checked, $(this));
});
});
※ ここでは、テーマの js フォルダに配置した場合を想定して説明します。
functions.php
上記、JavaScript のファイルを、functions.php などで読み込むようにします。
function category_parent_linkage_script() {
wp_enqueue_script( 'category-parent-linkage', get_template_directory_uri().'/js/category-parent-linkage.js', array( 'jquery' ) );
}
add_action( 'admin_print_scripts-post.php', 'category_parent_linkage_script' );
add_action( 'admin_print_scripts-post-new.php', 'category_parent_linkage_script' );
これで、投稿編集画面において自動チェックするようになります。
Welcart プラグインの商品編集画面においても自動チェックしたい場合は、下記のコードを追加してください。
if ( defined( 'USCES_VERSION' ) ) {
add_action( 'admin_print_scripts-welcart-shop_page_usces_itemedit', 'category_parent_linkage_script' );
add_action( 'admin_print_scripts-welcart-shop_page_usces_itemnew', 'category_parent_linkage_script' );
}
まとめ
親カテゴリーのチェックもれがなくなり、地味に便利です。
なるべくプラグインをインストールしたくない方は、どうぞご利用ください。