WordPressの投稿でカテゴリーを1つしか選択できないようにする方法

WordPressの投稿でカテゴリーを1つしか選択できないようにする方法

WordPressの投稿でカテゴリーを1つしか選択できないようにする方法

WordPressのカテゴリーは、通常チェックボックスで選択するようになっているので、複数選択が可能です。しかし、カテゴリーを1つしか選択できないようにしたいというケースもあるかと思います。

チェックボックスを1つだけ選択するようにすればいいのですが、それだと誤操作などヒューマンエラーが発生する可能性があります。

そこで、チェックボックスからカテゴリーを1つしか選択できないように、WordPress側で制御してしまう方法を紹介したいと思います。

カテゴリーの選択をラジオボタンに変更する

カテゴリーの選択をチェックボックスから、ラジオボタンに変更してしまう方法です。

functions.phpに以下を追加することで、カテゴリーがラジオボタンに変わります。

function my_print_footer_scripts() {
?>
  <script>
    jQuery(function($) {
      // 投稿画面のカテゴリー選択をラジオボタンに変更
      $("#categorychecklist input[type=checkbox]").each(function() {
        $(this).replaceWith($(this).clone().attr("type", "radio"));
      });

      // クイック編集のカテゴリー選択をラジオボタンに変更
      $(".cat-checklist input[type=checkbox]").each(function() {
        $(this).replaceWith($(this).clone().attr("type", "radio"));
      });
    });
  </script>
<?php
}
add_action('admin_print_footer_scripts', 'my_print_footer_scripts');

ラジオボタンに変更すれば、自ずと1つしか選択できなくなりますね。

チェックボックスのまま選択を制限する

もう1つは、チェックボックスのまま、選択を制限する方法です。functions.phpに以下を追加します。

function my_print_footer_scripts() {
?>
  <script>
    jQuery(function($) {
      // 投稿画面のカテゴリー選択を制限
      let category_checklist = $('#categorychecklist input[type=checkbox]');
      category_checklist.click(function() {
        if ($(this).prop('checked')) {
          category_checklist.prop('checked', false);
          $(this).prop('checked', true);
        }
      });

      // クイック編集のカテゴリー選択を制限
      let quick_checklist = $('.cat-checklist input[type=checkbox]');
      quick_checklist.click(function() {
        $(this).closest('.cat-checklist').find('input[type=checkbox]').not(this).prop('checked', false);
      });

    });
  </script>
<?php
}
add_action('admin_print_footer_scripts', 'my_print_footer_scripts');

見た目はチェックボックスのままでも、1つしか選択できなくなります。

あとがき

見た目的にも1つしか選択できないのがわかるので、ラジオボタンにする方が好ましいかもしれませんね。

なお、#categorychecklistや.cat-checklistなどのIDやクラスの部分を変更すれば、カスタムタクソノミーでも使えます。

この記事が気に入ったら
いいね!してね♪

Twitter で

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です