Top

メモ書き

どうも。
今回のこれもそこそこ頻出のやつですね。
Webサイトを作成して納品する場合、依頼主にカテゴリーを複数選択されると都合がわるいなーってことがあります。注意書きしても限界があるので、そもそもできないようにするのがいいですよね。

前回の記事のカスタム投稿のカテゴリーが未選択の時に特定のカテゴリーを自動で選択させる方法も使いますので、こちらも一読ください。

functions.phpに記述してカスタム投稿のカテゴリーを1つしか選べないように制限する方法

まずは結論となるコードから。

//カテゴリーが未選択の時に特定のカテゴリーを自動で選択させる
function add_defaultcat($post_ID) {
    global $wpdb;
    $curTerm = wp_get_object_terms($post_ID, 'faq-cat');

    if (0 == count($curTerm)) {
        $defaultTerm= array(1); //デフォルトにしたいカテゴリーのIDを選択
        wp_set_object_terms($post_ID, $defaultTerm, 'faq-cat');
    }
}
add_action('publish_faq', 'add_defaultcat');


//カテゴリー選択を1つしかできないように制限する
function limit_category_select() {
	global $post;
	if( !isset( $post ) || 'faq' != $post->post_type ){
        return;
	}
	echo '
	<script type="text/javascript">
		jQuery(function($) {
			// 投稿画面のカテゴリー選択を制限
			var cat_checklist = $(".categorychecklist input[type=checkbox]");
			cat_checklist.click( function() {
				$(this).parents(".categorychecklist ").find("input[type=checkbox]").not(this).removeAttr("checked");
			});
			// クイック編集のカテゴリー選択を制限
			var quickedit_cat_checklist = $(".cat-checklist input[type=checkbox]");
			quickedit_cat_checklist.click( function() {
				$(this).parents(".cat-checklist").find("input[type=checkbox]").not(this).removeAttr("checked");
			});
		});
	</script>
	';
}
add_action('admin_print_footer_scripts', 'limit_category_select');

前半部分は前回の投稿と同じコードで、よくある質問ページを想定し、post_typeはfaq , taxonomyはfaq-cat になっています。

自動でカテゴリーのIDが 1 になるようにして、15行目以下でカテゴリー選択を1つしかできないように制限しています。これでひとつの投稿につき、必ずひとつのカテゴリーがつくことになります。
途中でjQueryも入るので、jQueryが使える状況にするのもお忘れなく。

紹介しといてなんですが、これもう少しうまくできると思うんですよねー笑
有識者の方、先輩エンジニアのみなさんご教授のほどよろしくお願いします。
もっと良い方法があったらまた紹介しますね。