WordPressでカスタム投稿を用意する際、多くの初心者のかたはプラグインに頼りがちです。便利ですからね。
しかし、プラグインを使いすぎると、サイトが重くなってパフォーマンスに影響が出ることもあります。
特に、サイトの軽量化やパフォーマンスの最適化を目指す場合、なるべくプラグインに頼らない方法がオススメです。

今回は functions.php に直接コードを書いてカスタム投稿を作成する方法を紹介します。

functions.php に記載するコード

以下は、WordPressのfunctions.phpに記述することで、カスタム投稿「商品」を作成し、その投稿にカテゴリー機能を追加するコードです。

function add_my_custom_post() {
	register_post_type ( 'my-custom-post', // カスタム投稿スラッグ
		array(
			'label' => '商品', // カスタム投稿名
			'description' => '',
			'public' => true,
			'show_ui' => true,
			'show_in_menu' => true,
			'capability_type' => 'post',
			'hierarchical' => false,
			'rewrite' => true,
			'query_var' => false,
			'has_archive' => true,
			'exclude_from_search' => false,
			'supports' => array(
				'title',
				'editor',
				'author',
				'revisions',
				'thumbnail',
				'excerpt',
				'comments'
			),
			'has_archive' => true,
			'rewrite' => array(
				'slug' => 'product', // カスタム投稿のスラッグ上書き
				'with_front' => false
			)
		)
	);
	register_taxonomy(
		'my-custom-cat', // カスタムカテゴリー
		'my-custom-post', // カスタムカテゴリーを紐づけるカスタム投稿
		array(
			'label' => 'カスタム・カテゴリー',
			'hierarchical' => true, // カテゴリー・タイプ
			'rewrite' => array('slug' => 'custom-cat'),
		)
	);
	register_taxonomy(
		'my-custom-tag', // カスタムタグ
		'my-custom-post', // カスタムタグを紐づけるカスタム投稿
		array(
			'label' => 'カスタム・タグ',
			'hierarchical' => false, // タグ・タイプ
			'rewrite' => array('slug' => 'custom-tag'),
		)
	);
}
add_action( 'init', 'add_my_custom_post' );

このコードを functions.php に追加することで、カスタム投稿タイプ「商品」と、それに対応する「カスタム・カテゴリー」と「カスタム・タグ」というタクソノミーが作成されます。投稿と同じように、管理画面から新しい記事を追加できるようになり、それをカテゴリー分けし、タグ付けすることも可能になります。

補足説明:
例えば「supports」の配列ではカスタム投稿の機能を指定しますが、特定の要素が不要であれば削除可能です。また、カスタム投稿のスラッグ上書きやアーカイブの設定も柔軟にカスタマイズできるため、サイトの構造や用途に応じて調整してください。

カスタム投稿を表示するためのテーマファイル

カスタム投稿を設置したら、次はそれを表示するためのテンプレートを用意します。

今回のケースの場合、アーカイブ表示のときは「archive-my-custom-post.php」を。
カスタム投稿個別ページは「single-my-custom-post.php」を用意すればOKです。

アーカイブ表示用のテンプレート:archive-my-custom-post.php

WordPressでは、カスタム投稿の一覧ページ(アーカイブページ)を表示するために、「archive-」の後にカスタム投稿スラッグを付けたテンプレートファイルを使用します。
たとえば「my-custom-post」というカスタム投稿を作成した場合、アーカイブページを表示するには「archive-my-custom-post.php」というファイルをテーマに追加します。

例:「archive-my-custom-post.php」の中身

<?php get_header(); ?>
<div class="custom-archive-container">
	<h1><?php post_type_archive_title(); ?></h1>
	<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
		<div class="custom-post-item">
			<a href="<?php the_permalink(); ?>">
			<h2><?php the_title(); ?></h2>
			<p><?php the_excerpt(); ?></p>
		</a>
	</div>
	<?php endwhile; else: ?>
		<p>No posts found</p>
	<?php endif; ?>
</div>
<?php get_footer(); ?>

個別表示用のテンプレート:single-my-custom-post.php

各カスタム投稿の個別ページを表示するためのテンプレートも必要です。通常の投稿であれば single.php が使われますが、カスタム投稿タイプ用には「single-」の後にカスタム投稿のスラッグを付けたファイル名が使われます。
たとえば「my-custom-post」というカスタム投稿に対応する個別ページをカスタマイズしたい場合、「single-my-custom-post.php」というテンプレートファイルを作成します。

例:「single-my-custom-post.php」の中身

<?php get_header(); ?>
<article class="custom-post">
    <h1><?php the_title(); ?></h1>
    <div class="post-content">
        <?php the_content(); ?>
    </div>
</article>
<?php get_footer(); ?>

そもそもカスタム投稿とは?

「そもそもカスタム投稿ってなに!?」という方々のために簡単にご説明。
WordPressにはデフォルトで「投稿」機能が備わっており、それがワードプレスの醍醐味とも言えます。

一般的に「投稿」はブログ記事やお知らせの更新に使用されます。しかしサイトの内容が複雑になってくると、1つの投稿タイプだけでは運用が難しくなります。

例えば。企業のウェブサイトで「製品情報」を紹介する記事と「お知らせ」を同じ「投稿」にまとめてしまうと、見た目や管理が煩雑になります。
このような場合に役立つのが「カスタム投稿」です。

カスタム投稿を使うことで「製品情報」や「イベント」「レシピ」「お知らせ」等々を別々に管理できるようになり、情報を整理して扱うことにより、インターフェース側でも美しく表示できます。

具体例

自社の商品を紹介する「製品」というカスタム投稿と、通常のお知らせを掲載する「お知らせ」というカスタム投稿を作成することで、それぞれの情報を明確に分けて管理できます。
「製品」ページには製品情報だけを表示し、「お知らせ」には会社のイベントや休業日のお知らせだけを表示させると、ユーザーにとってもわかりやすく、管理者にとっても運営がスムーズになります。

カスタム投稿のメリット

  • 情報の整理
    カテゴリーやタグだけで整理するのではなく、異なる種類のコンテンツを分けて管理することができ、サイト全体の見た目にも影響します。
  • SEOの向上
    カスタム投稿ごとに異なるURL構造を持たせることができるため、SEOにもプラスになります。
  • テーマのカスタマイズが容易
    カスタム投稿を使うことで、テーマ内で特定の投稿タイプに応じたデザインを作りやすくなります。

最後に

WordPressでのカスタム投稿の作成は、テーマやサイト全体のパフォーマンスを維持しつつ、サイトを柔軟にカスタマイズするための有効な手段です。プラグインを使わず、functions.phpに直接記述することで、余計なコードの追加を避け、サイトの軽量化にもつながります。

プラグインを減らしたいけれど、サイトの機能は拡充したい」とお考えの方は、ぜひ今回紹介した方法を試してみてください。