【WordPress】カテゴリ・タグ選択をモーダルで実装する方法

【WordPress】カテゴリ・タグ選択をモーダルで実装する方法 WordPress

WordPressでは投稿編集画面でカテゴリやタグをチェックボックス・入力欄で選択できますが、選択肢が多くなると見づらく、操作性が低下します。特にタクソノミーの項目が大量にある場合、標準UIでは目的の項目を探すのが大変です。そこで本記事では、カテゴリやタグをモーダル(ポップアップ)で選択するUIに変更する実装方法を紹介します。

モーダル実装の概要

モーダルUIでは、投稿編集画面内にあるカテゴリ選択部分を非表示にし、「カテゴリを選択」ボタンをクリックしたときにポップアップウィンドウで選択肢を表示します。ユーザーはモーダル内でカテゴリをチェックし、「決定」ボタンで反映させることができます。

投稿編集画面にモーダルUIを追加する

以下のコードをテーマの functions.php に追加し、モーダル用のHTMLとJSを投稿編集画面に読み込みます。

// 投稿編集画面にモーダル用HTMLとJSを追加
function add_category_modal_ui() {
  $screen = get_current_screen();
  if ($screen->post_type !== 'post') return;

  ?>
  <style>
    .category-modal { display: none; position: fixed; top: 10%; left: 50%; transform: translateX(-50%); width: 500px; max-height: 70%; overflow-y: auto; background: #fff; border: 1px solid #ccc; padding: 20px; z-index: 10000; }
    .category-modal-overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.6); z-index: 9999; }
  </style>

  <div class="category-modal-overlay"></div>
  <div class="category-modal">
    <h2>カテゴリを選択</h2>
    <ul>
      <?php
        $categories = get_categories(array('hide_empty' => false));
        foreach ($categories as $cat) {
          echo '<li><label><input type="checkbox" value="' . esc_attr($cat->term_id) . '" class="js-cat-check">' . esc_html($cat->name) . '</label></li>';
        }
      ?>
    </ul>
    <button type="button" class="button js-cat-modal-confirm">決定</button>
    <button type="button" class="button js-cat-modal-close">閉じる</button>
  </div>

  <script>
    jQuery(document).ready(function($) {
      // 元のカテゴリーUIを非表示
      $('#categorydiv').hide();
      // トリガーボタンを追加
      $('#categorydiv').before('<button type="button" class="button js-cat-modal-open">カテゴリを選択</button>');

      $('.js-cat-modal-open').on('click', function() {
        $('.category-modal, .category-modal-overlay').fadeIn();
      });

      $('.js-cat-modal-close, .category-modal-overlay').on('click', function() {
        $('.category-modal, .category-modal-overlay').fadeOut();
      });

      $('.js-cat-modal-confirm').on('click', function() {
        // チェックされたIDだけ反映
        const selectedIds = [];
        $('.js-cat-check:checked').each(function() {
          selectedIds.push($(this).val());
        });

        // 元のチェックボックスに反映
        $('#categorydiv input[type="checkbox"]').prop('checked', false);
        selectedIds.forEach(id => {
          $('#categorydiv input[value="' + id + '"]').prop('checked', true);
        });

        $('.category-modal, .category-modal-overlay').fadeOut();
      });
    });
  </script>
  <?php
}
add_action('admin_footer-post.php', 'add_category_modal_ui');
add_action('admin_footer-post-new.php', 'add_category_modal_ui');

タグ選択もモーダル対応にするには

タグ(非階層のタクソノミー)にも同様のUIを適用できます。get_terms()関数でタグ一覧を取得し、入力ではなくチェックボックスで選択させる形に変更することで、誤入力や重複のリスクも軽減できます。

必要に応じて post_tag を対象にしたJS処理を追加し、モーダルでタグを複数選択 → テキストエリアに反映、という仕組みも可能です。

まとめ

カテゴリやタグをモーダルUIにすることで、項目数が多い場合でもユーザーは見やすく・選びやすくなります。特に多階層のカテゴリや100件以上のタグがあるような大規模な投稿管理において、UXの向上に大きく貢献します。

WordPress管理画面を実用的にカスタマイズしたい場合は、今回のようなモーダル導入をぜひ検討してみてください。