@ WordPress

カスタム投稿タイプ

カスタム投稿タイプの設定

カスタム投稿タイプは自分で作れる新しい投稿タイプです。register_post_type() メソッドを使って WordPress へカスタム投稿タイプを追加できます。

WordPress Codex:投稿タイプ

function.php に下記の内容を記述し、カスタム投稿タイプを追加することができます。

次のソースコードでは、ダッシュボードに「プロダクト」という項目が追加され、新規追加、一覧表示が行えます。

function.php

add_action( 'init', 'create_post_type' );

function create_post_type() {
	/* 新規投稿タイプ(product)を作成 */
	register_post_type( 'product',
		array(
			'labels' => array(
				'name' => __( 'プロダクト' ),
				'singular_name' => __( 'Product' )
			),
			'public' => true,
			'has_archive' => true,
		)
	);
}

必要なパラメータを指定した、記述例は次のようになります。

function.php

add_action( 'init', 'create_post_type' );

function create_post_type() {
	/* 新規投稿タイプ(product)を作成 */
	register_post_type( 'product',
		array(
			$labels = array(
				'name' => __( 'プロダクト' ),
				'singular_name' => __( 'Product' ),
				'add_new' => '新規追加',
				'add_new_item' => '新規プロダクトを追加',
				'edit_item' => '投稿の編集',
				'new_item' => '新しい投稿',
				'all_items' => 'プロダクト一覧',
				'view_item' => 'プロダクトを表示',
				'search_items' => 'プロダクトを検索',
				'not_found' => '投稿が見つかりませんでした。',
				'not_found_in_trash' => 'ゴミ箱内に投稿が見つかりませんでした。',
				'parent_item_colon' => '',
				'menu_name' => 'プロダクト'
			),
			'labels' => $labels,
			'public' => true,
			'publicly_queryable' => true,
			'show_ui' => true,
			'show_in_menu' => true,
			'query_var' => true,
			'rewrite' => array( 'slug' => 'product' ),
			'capability_type' => 'post',
			'has_archive' => true,
			'hierarchical' => false,
			'menu_position' => 5, //メニューの表示位置を指定 「投稿」の下は 5 、「メディア」の下は 10 、「固定ページ」の下は 20 
			'supports' => array(
				'title', //タイトル
				'editor', //(content) 本文
				'author', //作成者
				'thumbnail', //アイキャッチ
				'excerpt', //抜粋
				'trackbacks', //トラックバック
				'custom-fields', //カスタムフィールド
				'comments', //コメント一覧。(編集画面でコメント数バルーンが見える)
				'revisions', //リビジョンを保存する
				'page-attributes' //親と子の順序指定 (hierarchical が true であることが必要)
			),
		)
	);
}

label
指定した名称が管理画面に表示されます。さらに引数を指定して表示する箇所によって細かく指定することもできますが、通常はこれで十だと思います。

public
管理画面やサイトにカスタム投稿タイプを表示可能にする設定です。デフォルトでは false になっているので、true に設定しておく必要があります。

menu_position
管理画面の左メニューでの表示位置を指定します。
5 は「投稿」の下、10 は「メディア」の下、20 は「固定ページ」の下です。

capability_type
capability_typeをpageにすると、固定ページとして利用可能になります。

hierarchical
hierarchicalをtrueにすると、属性に「親」が表示され、ページに階層構造を持たせることができるようになります。

supports
管理画面に表示する項目を指定します。他にも下記のような設定が可能です。

  • ‘title’ (タイトル)
  • ‘editor’ (内容の編集)
  • ‘author’ (作成者)
  • ‘thumbnail’ (アイキャッチ画像。現在のテーマが post-thumbnails をサポートしていること)
  • ‘excerpt’ (抜粋)
  • ‘trackbacks’ (トラックバック送信)
  • ‘custom-fields’ (カスタムフィールド)
  • ‘comments’ (コメントの他、編集画面にコメント数のバルーンを表示する)
  • ‘revisions’ (リビジョンを保存する)
  • ‘page-attributes’ (メニューの順序。「親〜」オプションを表示するために hierarchical が true であること)「page-attributes」を追加すると、管理画面から新規追加した際に、「属性」が表示され、「ページ順序」が利用できるようになります。
  • ‘post-formats’ (投稿のフォーマットを追加。)

has_archive
trueにすると、アーカイブページを持つことができるようになります。「パーマリンク設定」を「投稿名」にした場合はアーカイブページのURLは以下のようになります。
http://example.com/ポストタイプ/

rewrite
シングルページのパーマリンク設定を rewrite の引数で変更することができます。
デフォルトでは、http://example.com/ポストタイプ/投稿名 となりますが、slug にたとえば test と指定すれば、シングルページの URL はアーカイブページと異なり、下記のようにすることが可能です。
http://example.com/test/投稿名

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

カスタム投稿タイプの表示

投稿タイプ別のアーカイブページを表示する場合は、投稿タイプ名が product であれば、「archive-product.php」、投稿タイプ別の個別ページを表示する場合は 「single-product.php」というテンプレートファイルを作成します。

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

twentyseventeen など、公式テーマの場合は、archive.php single.php を必要に応じて編集して利用できます。

サイドバーにカスタム投稿タイプの投稿一覧を表示する

サイドバーにカスタム投稿タイプの投稿一覧を表示したい場合は、次のように作成します。

sidebar-post_type-entries.php

<ul>
<?php $args = array(
	'numberposts' => 5, //表示(取得)する記事の数
	'post_type' => 'post_type' //投稿タイプの指定
);
$customPosts = get_posts($args);
if($customPosts) : foreach($customPosts as $post) : setup_postdata( $post ); ?>
<li><a href="<?php the_permalink(); ?>">
	<?php the_title(); ?>
</a></li>
<?php endforeach; ?>
<?php else : //記事が無い場合 ?>
<li>
	<p>記事はまだありません。</p>
</li>
<?php endif;
wp_reset_postdata(); //クエリのリセット ?>
</ul>

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

any-template.php

<?php get_template_part('sidebar-post_type-entries'); ?>