カスタム投稿タイプとは

WordPressには、デフォルトで「投稿(Post)」と「固定ページ(Page)」という2つのコンテンツタイプがあります。カスタム投稿タイプを使うと、これらとは独立した新しいコンテンツタイプを作成できます。

標準の投稿タイプ

投稿タイプ 用途 特徴
投稿(Post) ブログ記事、ニュース 時系列表示、カテゴリー・タグで分類
固定ページ(Page) 会社概要、お問い合わせ 階層構造、時系列に依存しない
添付ファイル(Attachment) 画像、PDF、動画 メディアライブラリで管理

カスタム投稿タイプの例

💡 カスタム投稿タイプの活用例

ECサイト:「商品」投稿タイプ
不動産サイト:「物件」投稿タイプ
イベントサイト:「イベント」投稿タイプ
求人サイト:「求人」投稿タイプ
ポートフォリオ:「作品」投稿タイプ
レストラン:「メニュー」投稿タイプ
会員サイト:「お客様の声」投稿タイプ

カスタム投稿タイプのメリット

  • コンテンツの明確な分離 - ブログ記事と商品情報を別々に管理できる
  • 専用の管理画面 - 各コンテンツタイプに独立した管理メニューが作れる
  • 独自のURL構造 - example.com/products/ のような専用URLを設定できる
  • カスタムフィールドとの組み合わせ - タイプごとに異なる入力項目を設定できる
  • 専用のテンプレート - コンテンツタイプごとに異なるデザインを適用できる

投稿とカスタム投稿タイプの違い

項目 通常の投稿 カスタム投稿タイプ
用途 ブログ記事、ニュース 任意のコンテンツ
管理画面 「投稿」メニュー 専用メニュー(例:「商品」)
URL /post-name/ /custom-type/post-name/
分類 カテゴリー・タグ 独自のタクソノミーも作成可
テンプレート single.php single-{type}.php

カスタム投稿タイプの作成方法

方法1:プラグインを使用(初心者向け)

コードを書かずに、プラグインでカスタム投稿タイプを作成できます。

Custom Post Type UI プラグイン

最も人気のあるカスタム投稿タイプ作成プラグインです。

  1. プラグインをインストール
    「プラグイン」→「新規追加」で「Custom Post Type UI」を検索してインストール・有効化します。
  2. 新規投稿タイプを追加
    「CPT UI」→「投稿タイプの追加と編集」を選択します。
  3. 基本設定を入力
    ・投稿タイプスラッグ:product(英数字、小文字推奨)
    ・複数形のラベル:商品
    ・単数形のラベル:商品
  4. 詳細設定(オプション)
    ・メニューアイコン:ダッシュアイコンまたはカスタムアイコン
    ・サポート機能:タイトル、エディター、アイキャッチ画像など
    ・公開設定:一般公開、検索可能など
  5. 「投稿タイプを追加」をクリック
    保存すると、管理画面に新しいメニューが表示されます。
✅ Custom Post Type UIの利点
  • コーディング不要
  • GUIで簡単に設定
  • エクスポート・インポート機能あり
  • カスタムタクソノミーも作成可能

方法2:コードで作成(上級者向け)

functions.phpにコードを追加して、カスタム投稿タイプを作成します。

<?php
// 商品カスタム投稿タイプの登録
function create_product_post_type() {
    $labels = array(
        'name' => '商品',
        'singular_name' => '商品',
        'add_new' => '新規追加',
        'add_new_item' => '新しい商品を追加',
        'edit_item' => '商品を編集',
        'new_item' => '新規商品',
        'view_item' => '商品を表示',
        'search_items' => '商品を検索',
        'not_found' => '商品が見つかりませんでした',
        'not_found_in_trash' => 'ゴミ箱に商品はありません',
        'menu_name' => '商品'
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'has_archive' => true,
        'publicly_queryable' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'products'),
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => 5,
        'menu_icon' => 'dashicons-cart',
        'supports' => array(
            'title',
            'editor',
            'thumbnail',
            'excerpt',
            'custom-fields',
            'revisions'
        )
    );

    register_post_type('product', $args);
}
add_action('init', 'create_product_post_type');
?>

主な設定項目の説明

パラメータ 説明 推奨値
public 公開するかどうか true
has_archive アーカイブページを持つか true
rewrite URLのスラッグ array('slug' => 'products')
menu_position 管理メニューの位置 5(投稿の下)
menu_icon メニューアイコン dashicons-*
supports サポート機能 title, editor, thumbnail
⚠️ パーマリンク設定のフラッシュ
カスタム投稿タイプを追加した後は、「設定」→「パーマリンク設定」を開いて「変更を保存」をクリックしてください。これでURLが正しく機能します。

カスタムタクソノミーの追加

カスタム投稿タイプには、独自のカテゴリーやタグ(カスタムタクソノミー)を追加できます。

カスタムタクソノミーの例

💡 タクソノミーの活用例

商品投稿タイプ:商品カテゴリー、ブランド、カラー
イベント投稿タイプ:イベントタイプ、開催地域
レシピ投稿タイプ:料理ジャンル、調理方法
物件投稿タイプ:物件種別、エリア、駅名

Custom Post Type UIでタクソノミーを作成

  1. タクソノミー追加画面へ
    「CPT UI」→「タクソノミーの追加と編集」を選択します。
  2. 基本情報を入力
    ・タクソノミースラッグ:product_category
    ・複数形のラベル:商品カテゴリー
    ・単数形のラベル:商品カテゴリー
  3. 投稿タイプと関連付け
    「利用する投稿タイプ」で「product」を選択します。
  4. 設定を保存
    「タクソノミーを追加」をクリックします。

コードでタクソノミーを作成

<?php
// 商品カテゴリータクソノミーの登録
function create_product_taxonomy() {
    $labels = array(
        'name' => '商品カテゴリー',
        'singular_name' => '商品カテゴリー',
        'search_items' => 'カテゴリーを検索',
        'all_items' => 'すべてのカテゴリー',
        'parent_item' => '親カテゴリー',
        'parent_item_colon' => '親カテゴリー:',
        'edit_item' => 'カテゴリーを編集',
        'update_item' => 'カテゴリーを更新',
        'add_new_item' => '新規カテゴリーを追加',
        'new_item_name' => '新しいカテゴリー名',
        'menu_name' => '商品カテゴリー'
    );

    $args = array(
        'labels' => $labels,
        'hierarchical' => true, // true=カテゴリー型、false=タグ型
        'public' => true,
        'show_ui' => true,
        'show_admin_column' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'product-category')
    );

    register_taxonomy('product_category', array('product'), $args);
}
add_action('init', 'create_product_taxonomy');
?>

カスタム投稿タイプのテンプレート作成

カスタム投稿タイプには、専用のテンプレートファイルを作成できます。

テンプレートファイルの命名規則

ファイル名 用途
single-{type}.php 個別ページ single-product.php
archive-{type}.php 一覧ページ archive-product.php
taxonomy-{taxonomy}.php タクソノミーページ taxonomy-product_category.php

個別ページテンプレートの例

<?php
// single-product.php
get_header();

while (have_posts()) : the_post();
?>
    <article class="product-single">
        <h1><?php the_title(); ?></h1>
        
        <?php if (has_post_thumbnail()) : ?>
            <div class="product-image">
                <?php the_post_thumbnail('large'); ?>
            </div>
        <?php endif; ?>
        
        <div class="product-info">
            <?php
            // カスタムフィールドの表示(ACF使用)
            $price = get_field('price');
            $stock = get_field('stock');
            
            if ($price) {
                echo '<p class="price">価格: ' . number_format($price) . '円</p>';
            }
            
            if ($stock) {
                echo '<p class="stock">在庫: ' . esc_html($stock) . '点</p>';
            }
            ?>
        </div>
        
        <div class="product-description">
            <?php the_content(); ?>
        </div>
        
        <div class="product-category">
            <?php
            $terms = get_the_terms(get_the_ID(), 'product_category');
            if ($terms) {
                echo 'カテゴリー: ';
                foreach ($terms as $term) {
                    echo '<a href="' . get_term_link($term) . '">' . $term->name . '</a> ';
                }
            }
            ?>
        </div>
    </article>
<?php
endwhile;

get_footer();
?>

一覧ページテンプレートの例

<?php
// archive-product.php
get_header();
?>
    <h1>商品一覧</h1>
    
    <div class="product-grid">
        <?php
        if (have_posts()) :
            while (have_posts()) : the_post();
        ?>
                <article class="product-card">
                    <a href="<?php the_permalink(); ?>">
                        <?php if (has_post_thumbnail()) : ?>
                            <?php the_post_thumbnail('medium'); ?>
                        <?php endif; ?>
                        
                        <h2><?php the_title(); ?></h2>
                        
                        <?php
                        $price = get_field('price');
                        if ($price) {
                            echo '<p class="price">' . number_format($price) . '円</p>';
                        }
                        ?>
                    </a>
                </article>
        <?php
            endwhile;
            
            the_posts_pagination();
        else :
            echo '<p>商品が見つかりませんでした。</p>';
        endif;
        ?>
    </div>
<?php
get_footer();
?>

カスタム投稿タイプの実用例

例1:ECサイト(商品管理)

🛒 商品管理システムの構成

カスタム投稿タイプ:product(商品)

カスタムタクソノミー:
・product_category(商品カテゴリー)
・product_brand(ブランド)
・product_tag(商品タグ)

カスタムフィールド:
・価格
・在庫数
・SKU番号
・商品画像ギャラリー
・商品仕様(サイズ、重量など)

例2:不動産サイト(物件管理)

🏠 物件管理システムの構成

カスタム投稿タイプ:property(物件)

カスタムタクソノミー:
・property_type(マンション、一戸建て、土地)
・area(エリア)
・station(最寄り駅)

カスタムフィールド:
・価格
・間取り
・専有面積
・築年数
・駅徒歩
・物件写真ギャラリー
・地図(Google Map)

例3:イベントサイト

📅 イベント管理システムの構成

カスタム投稿タイプ:event(イベント)

カスタムタクソノミー:
・event_category(セミナー、ワークショップ、展示会)
・event_location(開催地域)

カスタムフィールド:
・開催日時
・開催場所
・参加費
・定員
・申込締切
・申込フォームURL

例4:レシピサイト

✅ レシピ管理システムの構成
  • カスタム投稿タイプ:recipe(レシピ)
  • タクソノミー:料理ジャンル、調理方法、食材
  • カスタムフィールド:調理時間、難易度、材料リスト、手順

よくある質問(FAQ)

Q1. カスタム投稿タイプと通常の投稿、どちらを使うべきですか?
ブログ記事やニュースのような時系列のコンテンツは通常の投稿を使います。商品、イベント、物件など、明確に異なる種類のコンテンツで、独自の管理方法や表示が必要な場合はカスタム投稿タイプを使いましょう。一般的な目安として、3つ以上の専用フィールドが必要な場合はカスタム投稿タイプが適しています。
Q2. カスタム投稿タイプを削除すると、投稿データも消えますか?
カスタム投稿タイプの登録を解除しても、データベース内の投稿データは削除されません。ただし、管理画面に表示されなくなり、公開ページからもアクセスできなくなります。データを完全に削除したい場合は、カスタム投稿タイプを削除する前に、該当する投稿を手動で削除する必要があります。
Q3. プラグインとコード、どちらで作成すべきですか?
初心者やコーディングに不慣れな方は、Custom Post Type UIなどのプラグインを使うことをおすすめします。GUIで簡単に設定でき、エクスポート機能もあります。一方、パフォーマンスを重視する場合や、複雑なカスタマイズが必要な場合は、コードで直接記述する方が柔軟性があります。
Q4. カスタム投稿タイプのURLを変更できますか?
はい、できます。register_post_type()関数の'rewrite'パラメータでスラッグを変更できます。例えば、'slug' => 'items'とすると、example.com/items/post-name/というURLになります。変更後は必ず「設定」→「パーマリンク設定」で「変更を保存」をクリックして、URLをフラッシュしてください。
Q5. カスタム投稿タイプはSEOに影響しますか?
適切に設定すれば、SEOにプラスの影響があります。コンテンツが明確に分類されることで、検索エンジンがサイト構造を理解しやすくなります。また、専用のURLスラッグを設定することで、キーワードを含むURLを作成できます。ただし、has_archive、publicなどのパラメータを適切に設定し、SEOプラグインで各投稿タイプを最適化する必要があります。
Q6. カスタム投稿タイプを検索結果に含めるには?
デフォルトでは、WordPressの検索は通常の投稿しか対象にしません。カスタム投稿タイプを含めるには、functions.phpに検索クエリを修正するコードを追加するか、Search Everythingなどのプラグインを使用します。また、register_post_type()の'exclude_from_search'パラメータをfalseに設定する必要があります。

まとめ

カスタム投稿タイプは、WordPressでより専門的なWebサイトを構築するための強力な機能です。ブログ以外の用途でWordPressを活用する際には必須の知識と言えます。

✅ カスタム投稿タイプ導入のチェックリスト
  • サイトで管理するコンテンツの種類を明確にする
  • 各コンテンツタイプに必要な情報項目を洗い出す
  • Custom Post Type UIプラグインをインストールする
  • カスタム投稿タイプを作成し、適切に設定する
  • 必要に応じてカスタムタクソノミーも作成する
  • カスタムフィールドを設定する(ACF推奨)
  • 専用テンプレートを作成し、デザインを調整する
  • パーマリンク設定をフラッシュする
  • SEO設定を最適化する

まずは簡単なカスタム投稿タイプから始めて、徐々に機能を拡張していきましょう。カスタムフィールドやカスタムタクソノミーと組み合わせることで、ほぼどんなタイプのWebサイトも構築できます。

関連用語