ExUnit の投稿タイプマネージャーで1つの投稿タイプに10個のカスタム分類を紐づける方法


  1. Staff Blog
  2. WordPress
  3. 制作・運用ノウハウ
  4. ExUnit の投稿タイプマネージャーで1つの投稿タイプに10個のカスタム分類を紐づける方法

アドベントカレンダー参加中!

こちらは Vektor WordPress Solutions Advent Calendar 2024 12月15日の記事です。

お久しぶりです。株式会社ベクトルスタッフの DRILL LANCER です。

前回はベクトルスタッフの松田さんによるボタンのブロックパターンの紹介記事でした。気に入ったパターンがあれば是非活用してみてください。

さて、この記事では、ExUnit の投稿タイプマネージャーで1つの投稿タイプに10個のカスタム分類を紐づける方法について解説します。

質問

ExUnit の投稿タイプマネージャーで 1 つの投稿タイプに 10 個のカスタム分類をを紐づける方法はありますか?

回答

はい、あります。下記コードを子テーマの functions.php にや自作プラグインの PHP ファイルに貼り付けて見てください。

/**
 * ExUnit の投稿タイプマネージャーで 1 つの投稿タイプに紐づけるカスタム分類の数を改変
 * @param string $taxonomy_count : 投稿タイプに紐づけるカスタム分類の数
 */
function my_veu_post_type_taxonomies( $taxonomy_count ) {
	$taxonomy_count = 10;
	return $taxonomy_count;
}
add_filter( 'veu_post_type_taxonomies', 'my_veu_post_type_taxonomies' );

下記画像のようにカスタム分類の登録可能数が 10 個になっていたら成功です。

実際にカスタム投稿タイプを作成して10個のカスタム分類を紐づけたところ正常に反映されました。

解説

下記は ExUnit の inc/post-type-manager/package/class.post-type-manager.php のカスタム分類に関する部分の抜粋です。(2024年12月13日現在)

			/*******************************************
			 * Custom taxonomies
			 */
			echo '<h4>' . esc_html__( 'Custom taxonomies(optional)', 'vk-all-in-one-expansion-unit' ) . '</h4>';

			echo '<p>';
			echo esc_html__( 'Custom taxonomy is like a category in post.', 'vk-all-in-one-expansion-unit' ) . '<br />';
			echo esc_html__( 'However, it refers to the "category" itself, not to the “item” of the category.', 'vk-all-in-one-expansion-unit' ) . '<br />';
			echo esc_html__( 'For example, if you create a post type "construction result", Custom taxonomy will be "construction type", "construction area", etc.', 'vk-all-in-one-expansion-unit' );
			echo '</p>';

			echo '<table class="table table-border">';

			// カスタム分類の情報は カスタムフィールドの veu_taxonomy に連想配列で格納している.
			$taxonomy = get_post_meta( $post->ID, 'veu_taxonomy', true );

			for ( $i = 1; $i <= apply_filters( 'veu_post_type_taxonomies', 5 ); $i++ ) {
				$slug     = ( isset( $taxonomy[ $i ]['slug'] ) ) ? $taxonomy[ $i ]['slug'] : '';
				$label    = ( isset( $taxonomy[ $i ]['label'] ) ) ? $taxonomy[ $i ]['label'] : '';
				$tag      = ( isset( $taxonomy[ $i ]['tag'] ) ) ? $taxonomy[ $i ]['tag'] : '';
				$rest_api = ( isset( $taxonomy[ $i ]['rest_api'] ) ) ? $taxonomy[ $i ]['rest_api'] : '';

				echo '<tr>';

				echo '<th rowspan="4">' . esc_attr( $i ) . '</th>';

				// slug.
				echo '<td>' . esc_html__( 'Custon taxonomy name (slug)', 'vk-all-in-one-expansion-unit' ) . '</td>';
				echo '<td><input type="text" id="veu_taxonomy[' . esc_attr( $i ) . '][slug]" name="veu_taxonomy[' . esc_attr( $i ) . '][slug]" value="' . esc_attr( $slug ) . '" size="20">';
				echo '<div>' . esc_html__( '* Please enter a string consisting of half-width lowercase alphanumeric characters, half-width hyphens, and half-width underscores.', 'vk-all-in-one-expansion-unit' ) . '</div>';
				echo '</td>';

				// 表示名.
				echo '<tr>';
				echo '<td>' . esc_html__( 'Custon taxonomy label', 'vk-all-in-one-expansion-unit' ) . '</td>';
				echo '<td><input type="text" id="veu_taxonomy[' . esc_attr( $i ) . '][label]" name="veu_taxonomy[' . esc_attr( $i ) . '][label]" value="' . esc_attr( $label ) . '" size="20"></td>';
				echo '</tr>';

				// tag.
				echo '<tr>';
				$checked = ( isset( $taxonomy[ $i ]['tag'] ) && $taxonomy[ $i ]['tag'] ) ? ' checked' : '';
				echo '<td>' . esc_html__( 'Hierarchy', 'vk-all-in-one-expansion-unit' ) . '</td>';
				echo '<td><label><input type="checkbox" id="veu_taxonomy[' . esc_attr( $i ) . '][tag]" name="veu_taxonomy[' . esc_attr( $i ) . '][tag]" value="true"' . esc_attr( $checked ) . '> ' . esc_html__( 'Make it a tag (do not hierarchize)', 'vk-all-in-one-expansion-unit' ) . '</label></td>';
				echo '</tr>';

				// RERT API.
				echo '<tr>';

				// チェックが元々入ってるかどうか.
				// 過去の仕様ではデフォルトで REST API はチェック無しだった.
				// しかし、一般的にブロックエディタ対応にする方が需要が高いため、デフォルトで true になるように変更した。
				// そのため、そのため、設定画面においては true で保存されていない場合は true にして返す.
				if ( isset( $taxonomy[ $i ]['rest_api'] ) ) {
					$checked = $taxonomy[ $i ]['rest_api'];
				}
				if ( 'false' !== $checked && 'true' !== $checked ) {
					$checked = 'true';
				}

				echo '<td>' . esc_html__( 'Corresponds to the block editor', 'vk-all-in-one-expansion-unit' ) . '</td>';
				echo '<td>';
				echo '<label><input type="radio" id="veu_taxonomy[' . esc_attr( $i ) . '][rest_api]" name="veu_taxonomy[' . esc_attr( $i ) . '][rest_api]" value="true"' . checked( $checked, 'true', false ) . '> ' . esc_html__( 'Corresponds to the block editor ( Export to REST API / optional )', 'vk-all-in-one-expansion-unit' ) . '</label>';
				echo '<br />';
				echo '<label><input type="radio" id="veu_taxonomy[' . esc_attr( $i ) . '][rest_api]" name="veu_taxonomy[' . esc_attr( $i ) . '][rest_api]" value="false"' . checked( $checked, 'false', false ) . '> ' . esc_html__( 'Does not correspond to the block editor', 'vk-all-in-one-expansion-unit' ) . '</label>';
				echo '</td>';
				echo '</tr>';
			}
			echo '</table>';

17 行目にfor ( $i = 1; $i <= apply_filters( 'veu_post_type_taxonomies', 5 ); $i++ ) { というコードがあります。

このコードによって何もしなければカスタム分類のフォームのまとまりを5回表示することが定義付けられています。

同行の中ほどに apply_filters( 'veu_post_type_taxonomies', 5 ); というコードがあります。

このコードは何もしなければ 5 を返しますが、フィルターフックveu_post_type_taxonomiesを発行し、その値への干渉を認めています。

add_filter( 'veu_post_type_taxonomies', 'my_veu_post_type_taxonomies' );

上記コードはフィルターフック veu_post_type_taxonomies に対しmy_veu_post_type_taxonomiesという関数で干渉することを宣言しています。

/**
 * ExUnit の投稿タイプマネージャーで 1 つの投稿タイプに紐づけるカスタム分類の数を改変
 * @param string $taxonomy_count : 投稿タイプに紐づけるカスタム分類の数
 */
function my_veu_post_type_taxonomies( $taxonomy_count ) {
	$taxonomy_count = 10;
	return $taxonomy_count;
}

関数my_veu_post_type_taxonomies の中身では 10 を返しています。

なので、フィルターフックveu_post_type_taxonomies では 10 という数字が渡されて、それがそのままカスタム分類のフォームの表示回数が 10 回になり、10個のカスタム分類が登録されるというカラクリです。

注意

今回の例では単一の文字列・数値をそのまま上書きするだけですが、配列の一部などを変更する場合は、元の配列を全て上書きするのではなく、変更したいキーの値だけを上書きしたりするようにしましょう。

まとめ

本記事ではExUnit の投稿タイプマネージャーで1つの投稿タイプに10個のカスタム分類を紐づける方法について解説しました。
もう一度コードを再掲しておきます。

/**
 * ExUnit の投稿タイプマネージャーで 1 つの投稿タイプに紐づけるカスタム分類の数を改変
 * @param string $taxonomy_count : 投稿タイプに紐づけるカスタム分類の数
 */
function my_veu_post_type_taxonomies( $taxonomy_count ) {
	$taxonomy_count = 10;
	return $taxonomy_count;
}
add_filter( 'veu_post_type_taxonomies', 'my_veu_post_type_taxonomies' );

明日はあおい屋さんが Vektor Passport について書いてくれるそうです。お楽しみに。

この記事を書いた人

DRILL LANCER
2020年7月入社。5月と6月は業務委託として参加。
ベクトルではテーマ・プラグイン・ブロックをいじってます。

最近自作 PC に関する情報を集めていていつかは自分で組みたいと思っている。
フルサイト編集に対応したブロックテーマ X-T9

フルサイト編集対応ブロックテーマ

WordPress テーマ X-T9 は、WordPress 5.9 から実装されたフルサイト編集機能に対応した「ブロックテーマ」と呼ばれる新しい形式のテーマです。
ヘッダーやフッターなど、今までのテーマではカスタマイズが難しかったエリアもノーコードで簡単・柔軟にカスタマイズする事ができます。

パターンを使って

よりクオリティの高いサイトに

パターンとは、WordPressのブロックを組み合わせて作ったデザインテンプレートのようなもの。プロのデザイナーが制作したパターンを300以上公開中!コピペしながら高品質なサイトを簡単に作れます。

VK AB Testing は、ABテストを実施するための WordPress 用プラグインです。ブロックエディターでテストパターンを自由に作成でき、ランダム表示とクリック計測が可能です。Webサイトや広告などの施策の改善にぜひご活用ください。


このデモサイトは Vektor,Inc. のテーマとプラグインで構築されています。ご購入や詳細情報は下記のリンクもご参考ください。

PAGE TOP