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やクラスの部分を変更すれば、カスタムタクソノミーでも使えます。