どうも。
今回のこれもそこそこ頻出のやつですね。
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が使える状況にするのもお忘れなく。
紹介しといてなんですが、これもう少しうまくできると思うんですよねー笑
有識者の方、先輩エンジニアのみなさんご教授のほどよろしくお願いします。
もっと良い方法があったらまた紹介しますね。