WEB制作

【WordPress】管理画面で投稿のカテゴリーを単一選択する方法

こんにちは、ぷぷのすけです。

プラグインを使わずWordPressの管理画面で投稿・カスタム投稿のカテゴリー(ターム)を複数選択から単一選択に変更したい!
そう思い、まず頭に浮かんだのがカテゴリーのチェックボックスをラジオボタン変更する方法です。調べた結果「PS Taxonomy Expander」プラグインを使えば簡単にできることが判明!
しかし、私と同様にいろんな事情でプラグインを使いたくない・使えない場合の対応策を備忘録として残しておこうと思います。

チェックボックスを1つしか選択できないようにする

いろいろ調べた結果、わざわざラジオボタンに変更しなくてもチェックボックスを1つしか選択しないようにすればいいじゃないか!と言う結論に達しました。

function.phpに下記のコードを追加してください。

function category_single_select() {
?>
<script type="text/javascript">
	jQuery(function($) {
		// 投稿画面のカテゴリー選択を制限
		var cl = $('.categorychecklist input[type=checkbox]');
		cl.click( function() {
			$(this).parents('.categorychecklist').find('input[type=checkbox]').attr('checked', false);
			$(this).attr('checked', true);
		});

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

		$('.categorychecklist>li:first-child, .cat-checklist>li:first-child').before('<p style="padding-top:5px;">1つ選んでください</p>');
	});
</script>
<?php
}
add_action('admin_print_footer_scripts', 'category_single_select');

これでチェックボックスが複数選択から単一選択に変更されます。

カスタムメニューは複数選択を維持したい場合

上記のソースコードではカスタムメニューも単一選択になってしまします。
カスタムメニューで複数選択を維持したい場合は下記のソースコードをfunction.phpに書いてください。

function category_single_select() {
?>
<script type="text/javascript">
	jQuery(function($) {
		// 投稿画面のカテゴリー選択を制限
		var cl = $('#category-all input[type=checkbox]');
		cl.click( function() {
			$(this).parents('#category-all').find('input[type=checkbox]').attr('checked', false);
			$(this).attr('checked', true);
		});

		// カスタム投稿画面のカテゴリー選択を制限
		var cl = $('#タクソノミー名-all input[type=checkbox]');
		cl.click( function() {
			$(this).parents('#タクソノミー名-all').find('input[type=checkbox]').attr('checked', false);
			$(this).attr('checked', true);
		});

		// クイック編集のカテゴリー選択を制限
		qcl = $('fieldset.inline-edit-categories input[type=checkbox]');
		qcl.click( function() {
			$(this).parents('fieldset.inline-edit-categories').find('input[type=checkbox]').attr('checked', false);
			$(this).attr('checked', true);
		});

		$('.categorychecklist>li:first-child, .cat-checklist>li:first-child').before('<p style="padding-top:5px;">1つ選んでください</p>');
	});
</script>
<?php
}
add_action('admin_print_footer_scripts', 'category_single_select');

13、15行目の’#タクソノミー名-all’ですが、「タクソノミー名」の部分をregister_taxonomyの
第1パラメーターで指定したタクソノミー名に変換してください。

Costom Post Type UIプラグインをお使いの方は、「タクソノミー名」の部分を
「タクソノミーの追加と編集」画面の「タクソノミースラッグ」で指定した値に変換してください。

(例)タクソノミー名が[hoge]の場合、’#hoge-all’になります。

今回、記事にした内容はWordPress 5.0から採用された新エディタのGutenberg(グーテンベルグ)には対応しておりません。新エディタの対応策がわかったら追記します。

この対応策は下記のサイトを参考にさせていただきました。
WordPress:カテゴリー選択を1つしかできないように制限する方法 | NxWorld

COMMENT

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