投稿のタグをチェックボックスで選択できるように変更【WordPress】
- WordPress -
2020.08.31
WordPressにデフォルトで存在する「投稿」とその「タグ」。
このタグがとても指定しづらく感じていました。
このタグを、以下のようにカテゴリと同じようにチェックボックスで選択できるようにしたい、ということで調べた結果をメモ。
クラシックエディタを利用している前提となります。グーテンベルグのブロックエディタでの動作確認はしていません。
投稿のタグをチェックボックスで選択できるようにする
結論、以下コードを「function.php」へコピペすることで解決できました。
WordPressデフォルトで存在するタグなので、特に編集不要でそのまま適用できると思うので試してみてください。
/*
* Meta Box Removal
*/
function rudr_post_tags_meta_box_remove() {
$id = 'tagsdiv-post_tag'; // you can find it in a page source code (Ctrl+U)
$post_type = 'post'; // remove only from post edit screen
$position = 'side';
remove_meta_box( $id, $post_type, $position );
}
add_action( 'admin_menu', 'rudr_post_tags_meta_box_remove');
/*
* Add
*/
function rudr_add_new_tags_metabox(){
$id = 'rudrtagsdiv-post_tag'; // it should be unique
$heading = 'Tags'; // meta box heading
$callback = 'rudr_metabox_content'; // the name of the callback function
$post_type = 'post';
$position = 'side';
$pri = 'default'; // priority, 'default' is good for us
add_meta_box( $id, $heading, $callback, $post_type, $position, $pri );
}
add_action( 'admin_menu', 'rudr_add_new_tags_metabox');
/*
* Fill
*/
function rudr_metabox_content($post) {
// get all blog post tags as an array of objects
$all_tags = get_terms( array('taxonomy' => 'post_tag', 'hide_empty' => 0) );
// get all tags assigned to a post
$all_tags_of_post = get_the_terms( $post->ID, 'post_tag' );
// create an array of post tags ids
$ids = array();
if ( $all_tags_of_post ) {
foreach ($all_tags_of_post as $tag ) {
$ids[] = $tag->term_id;
}
}
// HTML
echo '<div id="taxonomy-post_tag" class="categorydiv">';
echo '<input type="hidden" name="tax_input[post_tag][]" value="0" />';
echo '<ul>';
foreach( $all_tags as $tag ){
// unchecked by default
$checked = "";
// if an ID of a tag in the loop is in the array of assigned post tags - then check the checkbox
if ( in_array( $tag->term_id, $ids ) ) {
$checked = " checked='checked'";
}
$id = 'post_tag-' . $tag->term_id;
echo "<li id='{$id}'>";
echo "<label><input type='checkbox' name='tax_input[post_tag][]' id='in-$id'". $checked ." value='$tag->slug' /> $tag->name</label><br />";
echo "</li>";
}
echo '</ul></div>'; // end HTML
}
上記コードは、以下サイトのものをそのまま使わせていただきましたm(_ _)m
How to Change Default Tag Meta Box: Make It like Category Meta Box ≫
※ちなみに、日本語で「wordpress タグ チェックボックス」などでググると「カスタムタクソノミーを使おう」という記事しか見つからず検索画面を5分くらい右往左往しました。google usで「wordpress tag checkbox」と検索したらトップで上記記事がヒットしたので、日本語と英語の情報量の違いを実感。