広告

WordPressカスタム投稿でもカテゴリーを有効にするには

この記事は約6分で読めます。

WordPressでカスタム投稿を設定した場合、投稿のカテゴリーやタグは表示されません。

そこで、カスタム投稿にもカテゴリーを表示させる方法についてお伝えします。

なお、細かくテストしていないので、アーカイブなど上手く表示できないかもしれません。

(追加でコードが必要になる可能性大)

また、基本は、カスタム投稿はカスタムタクソノミーでカテゴリ分けを行います。

ちょっと、あまり使わない方法かもしれません。

条件

WordPress バージョン 5.8.3

カスタム投稿やカスタムタクソノミーは、function.phpにコードで入れる。

結論

以下はnewsというカスタムタクソノミーとカテゴリーを表示させる例です。

よくありがちなやつですね。。。

<?php
/**
 * カスタム投稿 ニュース
 *
 * @package WordPress
 * @subpackage yorozuyaarimichi
 * @author aw1.jp
 * @version 2022.1.16
 */

/**
 * カスタム投稿 ニュース
 *
 * @return void
 */
function add_custom_news() {
	if ( function_exists( 'register_post_type' ) ) {

		$slug = 'news';

		$labels = array(
			'name'               => 'ニュース',
			'singular_name'      => 'ニュース',
			'add_new'            => 'ニュースを新しく追加',
			'add_new_item'       => 'ニュースを新しく追加',
			'edit_item'          => '編集',
			'new_item'           => '新しいニュースアイテム',
			'view_item'          => 'ニュースアイテムを見る',
			'search_items'       => '検索する',
			'not_found'          => '見つかりませんでした',
			'not_found_in_trash' => 'ゴミ箱には見つかりませんでした',
			'parent_item_colon'  => '',
		);

		// 管理画面で表示する項目
		$supports_array = array(
			'title', // タイトル
			'editor', // エディタ
			'author', // 投稿者
			'thumbnail', // アイキャッチ
			'excerpt', // 抜粋
			'revisions', // リビジョン
		);

		// 表示するカテゴリー
		$cat_array = array(
			'news_category', // register_taxonomyで定義したカスタムタクソノミー
			'category', // 投稿のカテゴリー
		);

		register_post_type(
			'news',
			array(
				'label'              => 'ニュース',
				'labels'             => $labels,
				'public'             => true,
				'publicly_queryable' => true,
				'menu_position'      => 3,
				'show_ui'            => true,
				'query_var'          => true,
				'rewrite'            => array( 'slug' => $slug ),
				'capability_type'    => 'post',
				'has_archive'        => true,
				'hierarchical'       => false, // 階層(親)の有無
				'supports'           => $supports_array,
				'taxonomies'         => $cat_array,
			)
		);
	}
}
add_action( 'init', 'add_custom_news' );


/**
 * ニュースのカテゴリー(カスタムタクソノミー)を追加
 *
 * @return void
 */
function create_news_taxonomies() {
	$args_news_category = array(
		'label'             => 'ニュースカテゴリー',
		'labels'            => array(
			'name'          => 'ニュースのカテゴリー',
			'singular_name' => 'ニュースのカテゴリー',
			'search_items'  => 'カテゴリーの検索',
			'popular_items' => '人気のカテゴリー',
			'all_items'     => '全てのカテゴリー',
			'parent_item'   => '親カテゴリー',
			'edit_item'     => 'カテゴリーを編集する',
			'update_item'   => 'カテゴリーを更新する',
			'add_new_item'  => '新しいカテゴリーを追加する',
			'new_item_name' => 'カテゴリーの名前',
		),
		'public'            => true,
		'show_ui'           => true,
		'show_admin_column' => true,
		'hierarchical'      => true,
		'rewrite'           => array( 'hierarchical' => false ),
	);
	register_taxonomy( 'news_category', 'news', $args_news_category );
}
// init アクションにフックして、そのタイミングで create_news_taxonomies を呼び出す
add_action( 'init', 'create_news_taxonomies', 0 );

全部は書いていないですが、とりあえず、これを元にすれば何とかなると思います。

アーカイブの出力はまた別途だけど・・・