WordPress 親カテゴリーを自動チェックする

WordPress で記事のカテゴリーを設定する際、階層になっているカテゴリーで子カテゴリーにチェックしても親カテゴリーはチェックされません。

通常は、子カテゴリーは 親カテゴリーに含まれるケースが多いと思われます。この場合、子カテゴリ―と親カテゴリーの両方をチェックしないといけません。これでは、面倒だしチェックし忘れる可能性もあるので、自動でチェックさせたいと思います。既に同様の機能をもったプラグインもありましたが、ここでは、プラグインなしで実装してみたいとおもいます。

仕様

  • 子カテゴリーがチェックされた場合、上階層のカテゴリーをチェックする。
  • 子カテゴリーがチェック オフされたら場合、同階層のカテゴリーがすべてチェック オフなら、上階層のカテゴリーをチェック オフする。
  • 親カテゴリーのチェック状態が変更された場合、子カテゴリーのチェック状態は元のまま変更しない。

2016-06-29-ss1実装には、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' );
}

まとめ

親カテゴリーのチェックもれがなくなり、地味に便利です。

なるべくプラグインをインストールしたくない方は、どうぞご利用ください。

コメントを残す

メールアドレスが公開されることはありません。

日本語でコメントを入力してください。