こんにちは。

先日仕事で使ったWordpressのカテゴリーについてのカスタマイズについて記事を書いていきます。
今回はWordPressで投稿を作成または編集する際に、カテゴリーの親子関係を自動的に選択する方法について解説します。
具体的には、子カテゴリを選択すると、それに対応する親カテゴリが自動的にチェックされる機能を実装します。
この機能を実現するために、jQueryを使用します。

では、具体的なコードを見ていきましょう。

function category_parent_check_script() {
?>
<script>
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));
  });
});
</script>
<?php
}
add_action('admin_head-post-new.php', 'category_parent_check_script');
add_action('admin_head-post.php', 'category_parent_check_script');

上記のコードを説明します。

このコードは、新規投稿ページ(post-new.php)と投稿編集ページ(post.php)のWordPress管理画面のヘッダーにスクリプトを追加します。これにより、カテゴリータクソノミー内のチェックボックスにイベントリスナーが追加され、子カテゴリがチェックされた際に対応する親カテゴリも自動的にチェックされるようになります。

このスクリプトは次のように動作します:

  1. まず、#taxonomy-category .children input(つまり、カテゴリタクソノミーの子カテゴリのチェックボックス)が変更された(チェックされたり、チェックが外れたりした)ときに、関数がトリガーされます。
  2. この関数は、まず、チェックボックスがチェックされているかどうかを確認します。
  3. 次に、同じ親を持つ兄弟のチェックボックスを確認します。そのうちのいずれかがチェックされていれば、’checked’変数はtrueのままになります。
  4. そして、parentNodes関数が呼び出され、checkedの値に基づいて親のチェックボックスをチェックまたはチェック解除します。これにより、親のチェックボックスをチェックまたはチェック解除しながらツリーを上に移動します。

以上がこのスクリプトの概要です。
これにより、WordPressで投稿を作成または編集する際に、親子関係のカテゴリを自動選択することが可能となります。ただし、将来的にWordPressのマークアップ構造が変更された場合、このスクリプトは特定のDOM構造に大きく依存しているため、動作しなくなる可能性があります。

以上、親子関係のカテゴリを自動選択するスクリプトの解説でした。
これが皆さんのWordPress活用に少しでも役立てば幸いです。