分析中です…しばらくお待ちください

MIKIYA KUBO


WordPressにおけるカスタム投稿タイプとは?

WordPressは、ブログ記事を管理する「投稿」と、固定ページを管理する「固定ページ」という二つの主要なコンテンツタイプを標準で備えております。しかしながら、ウェブサイトの目的が多様化する現代において、これらの標準機能だけでは表現しきれないコンテンツが増加してまいりました。

例えば、製品情報、イベント情報、店舗情報、ポートフォリオ、求人情報など、それぞれが独自の項目や表示形式を必要とする場合がございます。このような特定の目的を持つコンテンツを効率的に管理・表示するために提供されているのが、「カスタム投稿タイプ」でございます。

カスタム投稿タイプを導入することにより、標準の「投稿」や「固定ページ」とは完全に独立したコンテンツの枠組みを構築することが可能となります。これにより、管理画面が整理され、コンテンツ作成者は目的のコンテンツに集中しやすくなり、ウェブサイト全体の情報構造がより明確になるという大きな利点がございます。

カスタム投稿タイプのメリットと具体的な活用例

カスタム投稿タイプを導入することには、数多くのメリットがございます。

  • コンテンツ管理の効率化: 各コンテンツタイプが独立しているため、管理画面が整理され、目的のコンテンツを見つけやすくなります。
  • 表示の柔軟性向上: 各カスタム投稿タイプに特化したテンプレートを作成できるため、デザインやレイアウトを自由にカスタマイズできます。
  • 機能拡張の容易さ: カスタムフィールドやカスタムタクソノミー(分類)との組み合わせにより、より詳細な情報を管理し、複雑な絞り込みや検索機能も実装しやすくなります。
  • SEOの最適化: 特定のコンテンツに特化したURL構造やメタ情報を設定できるため、検索エンジンからの評価向上に貢献いたします。

具体的な活用例としては、以下のようなものが挙げられます。

  • 製品情報サイト: 各製品をカスタム投稿タイプとして登録し、製品名、価格、特徴、ギャラリー、スペックなどのカスタムフィールドと連携させます。
  • イベント情報サイト: イベント名、開催日時、場所、出演者、チケット情報などを管理し、過去のイベントと今後のイベントを分離して表示します。
  • ポートフォリオサイト: 各作品をカスタム投稿タイプとし、作品名、制作期間、使用技術、クライアント名などを詳細に記録します。
  • 店舗情報サイト: 各店舗をカスタム投稿タイプとし、店名、住所、電話番号、営業時間、地図情報などを表示します。
  • 求人情報サイト: 職種、勤務地、給与、応募資格、仕事内容などを管理し、応募フォームと連携させます。

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

カスタム投稿タイプを作成する方法は、主に「プラグインを利用する方法」と「コードを直接記述する方法」の二通りがございます。

アイコン
プラグインで手軽に導入できますね。CPT UI、便利そうです。

1. プラグインを利用する方法(推奨)

WordPress初心者の方や、手軽にカスタム投稿タイプを導入したい方には、プラグインの利用を強く推奨いたします。代表的なプラグインとしては「Custom Post Type UI (CPT UI)」がございます。

Custom Post Type UI (CPT UI) を利用した手順:

  1. WordPressの管理画面にログインし、「プラグイン」→「新規追加」へ移動いたします。
  2. 検索ボックスに「Custom Post Type UI」と入力し、検索結果からプラグインをインストールして有効化いたします。
  3. 有効化後、管理画面のサイドバーに「CPT UI」というメニューが追加されますので、「投稿タイプの追加/編集」をクリックいたします。
  4. 以下の項目を入力・設定いたします。
    • 投稿タイプスラッグ: カスタム投稿タイプを一意に識別するIDでございます。半角英数字とハイフンのみを使用し、例として「product」や「event」のように設定いたします。一度設定すると変更は推奨されません。
    • ラベル: 管理画面で表示される名前でございます。例として「製品」「イベント」のように設定いたします。複数形と単数形の両方を設定できます。
    • 設定: こちらで詳細な動作を設定いたします。
      • パブリック: 管理画面で表示し、一般公開するかどうか。通常は「true」に設定いたします。
      • アーカイブを有効化: カスタム投稿タイプの記事一覧ページ(アーカイブページ)を生成するかどうか。通常は「true」に設定いたします。
      • サポート: そのカスタム投稿タイプで利用したい機能を選択いたします。タイトル、エディター(本文)、アイキャッチ画像、カスタムフィールドなどが選択可能です。
      • 階層: 親子関係を持たせるかどうか。固定ページのように階層構造が必要な場合は「true」に設定いたします。
      • メニューアイコン: 管理画面のサイドバーに表示されるアイコンを選択できます。
  5. 必要な設定が完了しましたら、「投稿タイプを追加」ボタンをクリックいたします。

これで、管理画面のサイドバーに新しいカスタム投稿タイプが表示され、コンテンツを追加できるようになります。

アイコン
CPT UIでのカスタム投稿タイプ作成、分かりやすいですね。functions.phpでの直接記述も、プラグインを減らしたい場合に役立ちます。

2. コードを直接記述する方法

より高度なカスタマイズを求める場合や、プラグインの数を減らしたい場合は、テーマのfunctions.phpファイルに直接コードを記述してカスタム投稿タイプを作成できます。

register_post_type()関数の利用:

WordPressでは、register_post_type()という関数を用いてカスタム投稿タイプを登録いたします。この関数は、通常、テーマのfunctions.phpファイル内に記述いたします。

以下に、製品情報を管理する「製品(product)」というカスタム投稿タイプを作成するコード例を示します。

<?php
function create_custom_post_type_product() {
    $labels = array(
        'name'                  => _x( '製品', 'Post Type General Name', 'textdomain' ),
        'singular_name'         => _x( '製品', 'Post Type Singular Name', 'textdomain' ),
        'menu_name'             => __( '製品', 'textdomain' ),
        'name_admin_bar'        => __( '製品', 'textdomain' ),
        'archives'              => __( '製品アーカイブ', 'textdomain' ),
        'attributes'            => __( '製品属性', 'textdomain' ),
        'parent_item_colon'     => __( '親製品:', 'textdomain' ),
        'all_items'             => __( 'すべての製品', 'textdomain' ),
        'add_new_item'          => __( '新しい製品を追加', 'textdomain' ),
        'add_new'               => __( '新規追加', 'textdomain' ),
        'new_item'              => __( '新しい製品', 'textdomain' ),
        'edit_item'             => __( '製品を編集', 'textdomain' ),
        'update_item'           => __( '製品を更新', 'textdomain' ),
        'view_item'             => __( '製品を表示', 'textdomain' ),
        'view_items'            => __( '製品を表示', 'textdomain' ),
        'search_items'          => __( '製品を検索', 'textdomain' ),
        'not_found'             => __( '製品は見つかりませんでした', 'textdomain' ),
        'not_found_in_trash'    => __( 'ゴミ箱に製品はありません', 'textdomain' ),
        'featured_image'        => __( '製品画像', 'textdomain' ),
        'set_featured_image'    => __( '製品画像を設定', 'textdomain' ),
        'remove_featured_image' => __( '製品画像を削除', 'textdomain' ),
        'use_featured_image'    => __( '製品画像を使用', 'textdomain' ),
        'insert_into_item'      => __( '製品に挿入', 'textdomain' ),
        'uploaded_to_this_item' => __( 'この製品にアップロード', 'textdomain' ),
        'items_list'            => __( '製品リスト', 'textdomain' ),
        'items_list_navigation' => __( '製品リストナビゲーション', 'textdomain' ),
        'filter_items_list'     => __( '製品リストをフィルタリング', 'textdomain' ),
    );
    $args = array(
        'label'                 => __( '製品', 'textdomain' ),
        'description'           => __( '製品情報', 'textdomain' ),
        'labels'                => $labels,
        'supports'              => array( 'title', 'editor', 'thumbnail', 'excerpt', 'custom-fields' ),
        'taxonomies'            => array( 'category', 'post_tag' ), // カテゴリとタグを使用可能にする場合
        'hierarchical'          => false,
        'public'                => true,
        'show_ui'               => true,
        'show_in_menu'          => true,
        'menu_position'         => 5,
        'menu_icon'             => 'dashicons-products',
        'show_in_admin_bar'     => true,
        'show_in_nav_menus'     => true,
        'can_export'            => true,
        'has_archive'           => true,
        'exclude_from_search'   => false,
        'publicly_queryable'    => true,
        'capability_type'       => 'post',
        'show_in_rest'          => true, // Gutenbergエディタで利用可能にする
    );
    register_post_type( 'product', $args );
}
add_action( 'init', 'create_custom_post_type_product' );
?>

このコードでは、$labels配列で管理画面に表示される様々なテキストを設定し、$args配列でカスタム投稿タイプの詳細な動作(サポートする機能、公開設定、メニューアイコンなど)を定義しております。add_action('init', ...)で、WordPressの初期化時にこの関数を実行するように指定いたします。

コードをfunctions.phpに保存した後、WordPressの管理画面にアクセスし、パーマリンク設定を一度保存し直すことで、新しいカスタム投稿タイプが認識され、正しく動作するようになります。

カスタムフィールドとの連携

カスタム投稿タイプは、それ単体でもコンテンツを分類するのに役立ちますが、その真価は「カスタムフィールド」と連携することで最大限に発揮されます。

例えば、製品情報カスタム投稿タイプに「価格」「型番」「製品コード」といった固有の情報を追加したい場合、WordPress標準のエディターでは対応できません。そこで、Advanced Custom Fields (ACF) などのプラグインを利用してカスタムフィールドを作成し、特定のカスタム投稿タイプに紐付けることで、より構造化された情報を管理できるようになります。

ACFプラグインを導入後、フィールドグループを作成し、そのフィールドグループを特定のカスタム投稿タイプ(例:製品)に適用する設定を行うことで、そのカスタム投稿タイプの編集画面に専用の入力欄が表示されるようになります。

カスタム投稿タイプの表示方法とテンプレート

カスタム投稿タイプで作成したコンテンツをウェブサイト上に表示するためには、テーマのテンプレートファイルを適切に設定する必要がございます。

WordPressには「テンプレート階層」という仕組みがあり、カスタム投稿タイプの場合、以下の命名規則に従ってテンプレートファイルを作成することで、自動的に適用されます。

  • アーカイブページ(一覧表示): archive-{post_type}.php
    (例:製品一覧ページは archive-product.php
  • シングルページ(個別表示): single-{post_type}.php
    (例:個別の製品ページは single-product.php

これらのファイルが存在しない場合、WordPressは汎用のarchive.phpsingle.php、あるいはindex.phpといったファイルを使用いたします。

以下に、single-product.phpの基本的な構造例を示します。

<?php get_header(); ?>

<main id="primary" class="site-main">

    <?php
    while ( have_posts() ) : the_post();

        ?>
        <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
            <header class="entry-header">
                <h1 class="entry-title"><?php the_title(); ?></h1>
            </header><!-- .entry-header -->

            <div class="entry-content">
                <?php the_content(); ?>
                <!-- カスタムフィールドの表示例 (ACFを使用している場合) -->
                <?php if( have_rows('product_details') ): ?>
                    <ul>
                    <?php while( have_rows('product_details') ): the_row(); 
                        $price = get_sub_field('price');
                        $model = get_sub_field('model_number');
                    ?>
                        <li>価格: <?php echo esc_html($price); ?></li>
                        <li>型番: <?php echo esc_html($model); ?></li>
                    <?php endwhile; ?>
                    </ul>
                <?php endif; ?>
            </div><!-- .entry-content -->
        </article><!-- #post-<?php the_ID(); ?> -->
        <?php

    endwhile; // End of the loop.
    ?>

</main><!-- #main -->

<?php get_footer(); ?>

この例では、標準のタイトルと本文の出力に加え、ACFで作成したカスタムフィールド「product_details」グループ内の「price」と「model_number」を表示するコードを記述しております。ご自身のサイトデザインに合わせて、HTMLやPHPを調整してご利用ください。

アイコン
カスタム投稿タイプ、理解が深まりました。 single-product.phpの例、大変参考になります。

よくある問題と解決方法

カスタム投稿タイプを導入する際に直面しやすい問題と、その解決策についてご説明いたします。

アイコン
カスタム投稿タイプは、コンテンツ管理の効率化とサイトの表現力を格段に高めてまいります。 複雑な情報も整理しやすくなるかと存じます。
  • カスタム投稿タイプのページが404エラーになる:
    カスタム投稿タイプを新規作成したり、スラッグを変更したりした際には、WordPressが新しいURL構造を認識するために、パーマリンク設定を再保存する必要がございます。管理画面の「設定」→「パーマリンク」へ移動し、何も変更せずに「変更を保存」ボタンをクリックしてください。
  • 管理画面にカスタム投稿タイプが表示されない:
    プラグインで作成した場合は、CPT UIの設定で「パブリック」や「UIを表示」が「true」になっているかご確認ください。コードで記述した場合は、'public' => true, および 'show_ui' => true,$args配列内に含まれているかご確認ください。
  • アーカイブページ(一覧ページ)が表示されない:
    コードで記述した場合は、'has_archive' => true,$args配列内に含まれているかご確認ください。また、アーカイブ用のテンプレートファイル(archive-{post_type}.php)が正しく配置されているか、または代替のテンプレートが機能しているかをご確認ください。
  • カスタムフィールドが表示されない/保存されない:
    Advanced Custom Fields (ACF) などのプラグインを使用している場合、フィールドグループの「ロケーション」設定が、該当のカスタム投稿タイプに正しく適用されているかをご確認ください。また、テンプレートファイル内でカスタムフィールドを出力するコード(例:get_field())が正しく記述されているかご確認ください。

実践的なヒントとベストプラクティス

カスタム投稿タイプを効果的に運用するためのヒントと、推奨される実践方法についてお伝えいたします。

  • スラッグは慎重に決定する: 投稿タイプスラッグは、URLの一部として使用されるため、一度設定すると変更が困難でございます。将来的な変更の可能性も考慮し、簡潔で分かりやすい名称を初期段階で決定してください。
  • カスタムフィールドとの組み合わせを前提とする: カスタム投稿タイプは、コンテンツを構造化する「箱」でございます。その箱に入れる具体的な「項目」はカスタムフィールドで定義することがほとんどです。両者をセットで計画することで、より柔軟で強力なコンテンツ管理が可能になります。
  • 不要な機能は無効化する: supports引数やCPT UIの設定で、タイトル、エディター、アイキャッチ画像など、そのカスタム投稿タイプに不要な機能は無効化してください。これにより、管理画面がシンプルになり、コンテンツ作成の効率が向上いたします。
  • パフォーマンスへの配慮: 多数のカスタム投稿タイプや大量のコンテンツを扱う場合、データベースへの負荷や表示速度に影響を与える可能性がございます。適切なキャッシュプラグインの導入や、最適化されたデータベースクエリの使用をご検討ください。
  • 開発環境でのテストを徹底する: 新しいカスタム投稿タイプを本番環境に導入する前に、必ず開発環境やステージング環境で十分にテストを行い、予期せぬ問題が発生しないことを確認してください。

よくある質問(Q&A)

Q1: カスタム投稿タイプとカスタムタクソノミーの違いは何ですか?

A1: カスタム投稿タイプは、コンテンツの「種類」を定義するものでございます。例えば「製品」や「イベント」といった、独立したコンテンツの枠組みを指します。一方、カスタムタクソノミーは、そのカスタム投稿タイプを「分類」するためのものでございます。標準のカテゴリやタグと同様に、例えば「製品」カスタム投稿タイプに対して「ブランド」「素材」といった分類を追加したい場合にカスタムタクソノミーを使用いたします。

Q2: 既存の投稿や固定ページをカスタム投稿タイプに変換できますか?

A2: 直接的な管理画面からの変換機能はございませんが、プラグインを利用したり、データベースを直接操作したりすることで変換は可能でございます。例えば「Post Type Switcher」のようなプラグインを使用すると、既存の投稿や固定ページを他のカスタム投稿タイプへ簡単に変更できる機能が提供されております。データベース操作の場合は慎重な作業が必要となりますので、必ずバックアップを取った上で行ってください。

Q3: カスタム投稿タイプを削除すると、その中のデータはどうなりますか?

A3: カスタム投稿タイプを削除すると、その投稿タイプに属するすべてのコンテンツ(投稿)も一緒に削除されます。プラグイン(CPT UIなど)で削除する場合も、コードからregister_post_type()の記述を削除する場合も同様でございます。一度削除したコンテンツは元に戻すことが非常に困難であるため、削除する前に必ずバックアップを取るか、慎重に判断してください。

Q4: どのプラグインを使えば良いですか?

A4: カスタム投稿タイプを管理するプラグインとしては、「Custom Post Type UI (CPT UI)」が最も広く利用されており、機能も豊富でございます。カスタムフィールドを追加する場合は、「Advanced Custom Fields (ACF)」がデファクトスタンダードとなっております。これら二つのプラグインを組み合わせることで、ほとんどの要件に対応できるかと存じます。

アイコン
カスタム投稿タイプ削除はコンテンツ喪失に繋がりますので、十分なバックアップと慎重な判断が肝要でございます。

Q5: カスタム投稿タイプはSEOに影響がありますか?

A5: 適切に設定されたカスタム投稿タイプは、SEOに良い影響を与える可能性がございます。コンテンツが構造化され、関連性の高い情報がまとまることで、検索エンジンがサイトの内容を理解しやすくなります。また、意味のあるURLスラッグ設定や、各ページに適切なタイトルタグやメタディスクリプションを設定することで、検索結果での表示向上に繋がります。ただし、単に作成するだけでなく、コンテンツの質や適切な内部リンク構造も重要でございます。

まとめ

本記事では、WordPressにおけるカスタム投稿タイプの概念から、プラグインやコードを用いた具体的な作成方法、表示のためのテンプレート設定、そしてよくある問題とその解決策、さらには実践的なヒントとQ&Aに至るまで、網羅的に解説いたしました。

カスタム投稿タイプは、WordPressサイトのコンテンツ管理能力を飛躍的に向上させる強力な機能でございます。これを活用することで、ウェブサイトの目的やコンテンツの種類に応じた最適な情報構造を構築し、ユーザーエクスペリエンスの向上、ひいてはビジネス目標の達成に貢献することが可能でございます。

最初の一歩は難しく感じるかもしれませんが、まずはプラグインから導入し、少しずつその機能に慣れていくことをお勧めいたします。本記事が、皆様のWordPressサイト構築の一助となれば幸いでございます。

XでシェアFacebookでシェアThreadsでシェア