カスタムタクソノミーのタグをチェックボックスに変更【WordPress】

- WordPress -
2019.11.25
WordPress

作成したカスタム投稿タイプにカスタムタクソノミー(階層=false)を紐づけたはいいものの、カスタム投稿タイプ記事の編集画面でタグ選択しづらい。

たとえばCustom Post Type UIで「コラムタグ」というカスタムタクソノミーを「階層=false」設定にして作るとこんな感じになります↓

カスタムタクソノミータグをチェックボックスに

これだとタグを入力する手間が面倒に感じるんですよね。しかもそもそもタグ名を覚えてなかったり「どんなタグ登録してたっけ?」ってなったり。

なので、これをチェックボックス一覧表示で選択できるようにしたい、と思いました。こんな感じ↓。

カスタムタクソノミータグをチェックボックスに

「WordPressにデフォルトで存在している投稿のタグ」は別の記事で書いた方法で実現可能なんですが、カスタム投稿タイプのカスタムタクソノミーをチェックボックス化するのにまた時間を取られたのでメモ。

カスタムタクソノミーのタグをチェックボックスに変更

まず、以下コードをコピーします(ボックス右上にコピーボタンがあります)。

// まずデフォルトで表示されているメタボックスを消去する
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
}

そして「functions.php」へそのまま貼り付け、以下のように環境に合わせて文字を置換してください。

  1. ★カスタムタクソノミーのスラッグ★ を環境に合わせて置き換える
    例) news_category に置き換え
  2. ★カスタム投稿タイプのスラッグ★ を環境に合わせて置き換える
    例) news に置き換え

置換漏れに気を付けてください。

これで、以下2点の動作を確認します。

  1. タグのメタボックスがチェックボックス表示に変わっていること
  2. チェックボックスにチェック→記事更新でタクソノミーに記事が紐づいたこと

タグのメタボックスがチェックボックス表示に変わっただけではなく、実際に投稿が紐づくかまで確認をし忘れないように気を付けましょう!

ちなみに、6行目のWP関数「remove meta box()」は、放り込む引数によって管理画面上の色々なメタボックスを非表示にできます。

詳しくは以下WordPress公式サイトの関数解説を確認してみてください。

Function Reference/remove meta box ≫