@ WordPress

カスタム分類

カスタム分類は、色々な項目を色々な方法でグループ化するために非常にパワフルな機能です。

新しく追加したカスタム投稿タイプに分類を追加する際に使われます。

WordPress Codex:カスタム分類

WordPress Codex:関数リファレンス/register taxonomy

カスタム分類の登録

新しいカスタム分類を追加するには、プラグイン API のアクションフックと、register_taxonomy() 関数を使用して functions.php に記述します。下記ソースコードは、「puroduct」という投稿タイプに「product_category」、「product_tag」というカスタム分類を追加する例です。

functions.php

add_action( 'init', 'custom_taxonomy' );

function custom_taxonomy() {
	/* 新規分類(product_category)を作成 */
	register_taxonomy(
		'product_category', //分類の名前
		'product', //分類を追加するカスタム投稿タイプ名
		array(
			'hierarchical' => true, //trueで親子関係使用
			'update_count_callback' => '_update_post_term_count',
			'label' => 'プロダクトのカテゴリー',
			'singular_label' => 'プロダクトのカテゴリー',
			'public' => true,
			'show_ui' => true //管理画面への表示
		)
	);
	
	/* 新規分類(product_tag)を作成 */
	register_taxonomy(
		'product_tag', //分類の名前
		'product', //分類を追加するカスタム投稿タイプ名
		array(
			'hierarchical' => true, //trueで親子関係使用
			'update_count_callback' => '_update_post_term_count',
			'label' => 'プロダクトのタグ',
			'singular_label' => 'プロダクトのタグ',
			'public' => true,
			'show_ui' => true //管理画面への表示
		)
	);
}

ダッシュボードのカスタム投稿タイプ(例:プロダクト)一覧にカスタム分類カラムを表示する

例えば、「puroduct」という投稿タイプに追加したカスタム分類「product_category」、「product_tag」を、ダッシュボードのカスタム投稿タイプ(例:プロダクト)一覧にカラムとして表示する場合には、functions.php に下記の内容を記述します。

functions.php

/* カスタム投稿タイプ(プロダクト)一覧に分類(product_category)カラムを表示 */
function manage_product_category($columns) {
	$columns['product_category'] = "カテゴリー";
	return $columns;
}
function add_product_category($column_name, $post_id){
	if( $column_name == 'product_category' ) {
		//カテゴリー名取得
		if( 'product_category' == $column_name ) {
			$product_category = get_the_term_list($post_id, 'product_category', '', ', ', '' );
		}
		//該当カテゴリーがない場合「なし」を表示
		if ( isset($product_category) && $product_category ) {
			echo $product_category;
		} else {
			echo __('None');
			}
		}
}
add_filter('manage_edit-product_columns', 'manage_product_category');
add_action('manage_posts_custom_column',  'add_product_category', 10, 2);

/* カスタム投稿タイプ(プロダクト)一覧に分類(product_tag)カラムを表示 */
function manage_product_tag($columns) {
	$columns['product_tag'] = "タグ";
	return $columns;
}
function add_product_tag($column_name, $post_id){
	if( $column_name == 'product_tag' ) {
		//カテゴリー名取得
		if( 'product_tag' == $column_name ) {
			$product_tag = get_the_term_list($post_id, 'product_tag', '', ', ', '' );
		}
		//該当カテゴリーがない場合「なし」を表示
		if ( isset($product_tag) && $product_tag ) {
			echo $product_tag;
		} else {
			echo __('None');
			}
		}
}
add_filter('manage_edit-product_columns', 'manage_product_tag');
add_action('manage_posts_custom_column',  'add_product_tag', 10, 2);

ダッシュボードのカスタム投稿タイプ(例:プロダクト)一覧のカスタム分類カラムにソート機能を追加する

カスタム分類カラムにソート機能を追加する場合は、functions.php に下記の内容を記述します。

functions.php

/* カスタム投稿タイプ(例:プロダクト)一覧の分類 product_category カラム ソート機能 */
function make_order_product_category_column_sortable( $columns ) {
	$columns['product_category'] = 'product_category';
	return $columns;
}
add_filter( 'manage_edit-product_sortable_columns', 'make_order_product_category_column_sortable' );

/* カスタム投稿タイプ(例:プロダクト))一覧の分類 product_tag カラム ソート機能 */
function make_order_product_tag_column_sortable( $columns ) {
	$columns['product_tag'] = 'product_tag';
	return $columns;
}
add_filter( 'manage_edit-product_sortable_columns', 'make_order_product_tag_column_sortable' );

カスタム分類を表示する

カスタム分類の表示は、分類名が product_category であれば、テンプレート階層のルールに従い、taxonomy-product_category.php を作成して表示することができます。

ループは通常通りの記述。ページネーションも [設定>表示設定] で指定した「1ページに表示する最大投稿数」を参照します。

twentyseventeen など、公式テーマの場合は、archive.php を適宜編集して利用できます。

必要に応じて、[パーマリンク設定]で[カスタム構造]を選択して、「/%category%/%postname%/」のようにパスを設定します。

カスタム分類をサイドバーに表示する

サイドバーにカスタム分類の分類名一覧を表示する場合は、次のように作成します。

sidebar-product-category.php

<ul>
<?php
wp_list_categories( 
	array('title_li' => '',
	'taxonomy' => 'product-category',
	'show_count' => 1
	)
);
?>
</ul>

次のように、テンプレートファイルから読み込みます。

any-template.php

<?php get_template_part('sidebar-product-category'); ?>