カスタムタクソノミーをチェックボックスで表示させる
目次
今回やりたいこと
デフォルトの投稿機能では、投稿画面の右側に表示されているカテゴリーのボックス内がチェックボックスで選択できるようになっていますが、カスタム投稿で新たに追加したタクソノミーに関しては、デフォルトの投稿機能のタグと同様に、文字入力や、「よく使われているタグから選択」のどちらかでカテゴリーを指定しなければなりません。
デフォルトの投稿に慣れているユーザーからすると、カテゴリーはチェックボックスで選択したいところだと思います。
functions.phpに記述
以下のコードを丸ごとコピペして、【】内を【】ごと文字置換してください。
必要なのは、カスタム投稿のスラッグと、チェックボックス表示に変更したいカスタムタクソノミーのスラッグ名の2つです。
置換間違えや、置換漏れがないように注意してください。
// デフォルトでサイドに表示されているボックスを削除
function my_tag_meta_box_remove() {
$id = 'tagsdiv-【カスタムタクソノミースラッグ名】';
$post_type = '【カスタム投稿スラッグ名】';
$position = 'side';
remove_meta_box( $id, $post_type, $position );
}
add_action( 'admin_menu', 'my_tag_meta_box_remove');
// カスタムタクソノミーをチェックボックスで表示
function my_add_new_tags_metabox(){
$id = 'custom-tagsdiv';
$heading = 'タグ'; // 管理画面のメタボックスに表示される文字
$callback = 'my_metabox_content';
$post_type = '【カスタム投稿スラッグ名】';
$position = 'side';
$pri = 'default';
add_meta_box( $id, $heading, $callback, $post_type, $position, $pri );
}
add_action( 'admin_menu', 'my_add_new_tags_metabox');
function my_metabox_content($post) {
$all_tags = get_terms( array('taxonomy' => '【カスタムタクソノミースラッグ名】', 'hide_empty' => 0) );
$all_tags_of_post = get_the_terms( $post->ID, '【カスタムタクソノミースラッグ名】' );
$ids = array();
if ( $all_tags_of_post ) {
foreach ($all_tags_of_post as $tag ) {
$ids[] = $tag->term_id;
}
}
// HTML
echo '<div id="taxonomy-【カスタムタクソノミースラッグ名】" class="categorydiv">';
echo '<input type="hidden" name="tax_input[【カスタムタクソノミースラッグ名】][]" value="0" />';
echo '<ul>';
foreach( $all_tags as $tag ){
$checked = "";
if ( in_array( $tag->term_id, $ids ) ) {
$checked = " checked='checked'";
}
$id = '【カスタムタクソノミースラッグ名】-' . $tag->term_id;
echo "<li id='{$id}'>";
echo "<label><input type='checkbox' name='tax_input[【カスタムタクソノミースラッグ名】][]' id='in-$id'". $checked ." value='$tag->slug' /> $tag->name</label><br />";
echo "</li>";
}
echo '</ul></div>'; // end HTML
}
これをコピペして2か所置換して上書き保存で完了です。カスタム投稿画面を再読み込みして確認してみましょう。一発で指定したカスタムタクソノミーのボックス内がチェックボックス表示に変更されました。
参考にさせていただいた記事
今回参考にさせていただいた記事はこちらです。自分用ですぐに見れるように今回記事として起こしましたが、内容は全く同じです。変更した箇所はございません。この方のおかげで今回やりたいことを無事実装させることができました。ありがとうございました。