カスタム投稿タイプとは?基本を理解しよう

WordPressのカスタム投稿タイプとは、標準の「投稿」や「固定ページ」とは別に、新しい種類の投稿機能を追加できる機能です。この機能を利用することで、ウェブサイトのコンテンツを目的に応じて効率的に管理することができます。

WordPressのデフォルト投稿タイプとは

WordPressには標準で以下の投稿タイプが用意されています:

  • 投稿:ブログ記事やニュースなど、時系列で管理するコンテンツ
  • 固定ページ:会社概要やお問い合わせなど、静的なコンテンツ
  • 添付ファイル:画像などのメディアファイル
  • リビジョン:記事の変更履歴
  • ナビゲーションメニュー:サイトのメニュー項目

これらの投稿タイプにはそれぞれ特徴があります。「投稿」はカテゴリーやタグによる分類が可能で、投稿日順に一覧表示できます。時系列で更新されるブログ記事やニュースの管理に適しています。一方、「固定ページ」は階層構造を持つことができ、親子関係を設定できます。会社概要やサービス紹介など、更新頻度が低く、サイトの基本となる情報の掲載に向いています。これらの投稿タイプはユーザーが自作するカスタム投稿とは違い特別な形で管理されています。

なぜカスタム投稿タイプが必要なのか

大規模なwebサイトやコーポレートサイトを運営していると、標準の投稿タイプだけでは管理が難しくなることがあります。例えば、ECサイトで商品情報を管理する場合、通常の投稿機能を使うと、ブログ記事と商品情報が混在してしまい、管理が煩雑になってしまいます。また、ポートフォリオサイトで実績を紹介する場合も、案件ごとに固有の情報を整理して掲載したいケースが多くあります。

このような場合にカスタム投稿タイプを使うことで、コンテンツごとに専用の管理画面を作成し、効率的な運用が可能になります。それぞれのコンテンツタイプに適した項目や分類方法を設定できるため、サイト運営がより体系的になります。

カスタム投稿タイプの活用例:コーポレートサイトのケーススタディ

大規模なコーポレートサイトを例に、カスタム投稿タイプの具体的な活用方法を見ていきましょう。企業のウェブサイトでは、以下のようなコンテンツを管理する必要があります:

  1. 企業からのお知らせ
  2. プレスリリース
  3. セミナー・イベント情報
  4. 採用情報
  5. 事例紹介

これらすべてを通常の投稿機能で管理しようとすると、カテゴリーだけで分類することになり、記事が混在して管理が煩雑になってしまいます。そこで、カスタム投稿タイプを活用して、以下のように整理することができます。

まず「お知らせ」用のカスタム投稿タイプを作成し、カスタムタクソノミーとして「お知らせカテゴリー」を設定します。これにより、製品情報、メンテナンス情報、キャンペーン情報などを体系的に分類できます。

次に「イベント」というカスタム投稿タイプを作成します。イベントでは開催日時や場所、定員数といった固有の情報が必要になるため、カスタムフィールドを追加して管理します。カスタムタクソノミーでセミナー、展示会、説明会などのイベントタイプごとに分類することで、ユーザーが目的のイベントを見つけやすくなります。

さらに「採用情報」のカスタム投稿タイプでは、職種や雇用形態でのカスタムタクソノミーを設定し、募集要項や待遇といった情報をカスタムフィールドで管理します。これにより、採用情報の一覧ページや詳細ページを効率的に運用できます。

このようにカスタム投稿タイプを活用することで、WordPressの管理画面上でコンテンツごとに専用の入力・管理機能を持たせることができ、サイト運営の効率が大きく向上します。また、ユーザー側も目的の情報にアクセスしやすくなり、サイトの使いやすさも向上します。

プラグインで簡単にカスタム投稿タイプを作成する手順

WordPressでカスタム投稿タイプを作成する最も簡単な方法は、プラグインを使用することです。中でも「Custom Post Type UI」は、直感的なインターフェースと豊富な設定オプションを備えた定番プラグインとして多くのサイトで利用されています。

Custom Post Type UIのインストールと有効化

まずは、WordPressの管理画面から「Custom Post Type UI」をインストールします。

  1. 管理画面の「プラグイン」→「新規追加」を選択
  2. 検索窓で「Custom Post Type UI」を検索
  3. 「インストール」→「有効化」をクリック

プラグインを有効化すると、管理画面の左メニューに「CPT UI」という項目が追加されます。

カスタム投稿タイプの基本設定手順

それでは実際にカスタム投稿タイプを作成していきましょう。ここでは例として「お知らせ」という投稿タイプを作成します。

  1. 「CPT UI」→「投稿タイプの追加」を選択
  2. 基本設定を入力
    • 投稿タイプスラッグ:「news」(半角英数字20文字以内)
    • 複数形のラベル:「お知らせ」
    • 単数形のラベル:「お知らせ」

カスタム投稿タイプの詳細設定項目の解説

基本設定の下にある「設定」セクションで、以下の重要な項目を設定します:

1.「アーカイブあり」:「true」に設定
お知らせ一覧ページを作成するために必要です

2.「メニューの位置」:「5」を入力
管理画面の「投稿」メニューの下に表示されます

3.「サポート」:必要な機能にチェック

  • タイトル
  • エディター
  • アイキャッチ画像
  • 抜粋

パーマリンク設定の更新

カスタム投稿タイプの作成後、必ず以下の手順でパーマリンクの更新が必要です:

  1. 「設定」→「パーマリンク設定」を選択
  2. 設定を変更せずに「変更を保存」をクリック

これにより、新しい投稿タイプのURLが正しく機能するようになります。

設定完了後は、管理画面の左メニューに「お知らせ」が追加され、通常の投稿と同じように記事を作成できるようになります。

この設定で、基本的なカスタム投稿タイプの作成は完了です。次のセクションでは、作成したカスタム投稿タイプにカテゴリーやタグなどの分類を追加する方法を説明します。

プラグインを使わずfunctions.phpでカスタム投稿タイプを実装する方法

WordPressのカスタム投稿タイプは、functions.phpにコードを直接記述することでも作成できます。プラグインに頼らないこの方法は、より細かな制御が可能で、サイトのパフォーマンスにも好影響を与えます。

register_post_typeの基本構文

カスタム投稿タイプを登録するには、register_post_type()関数を使用します。以下は「お知らせ」を作成する基本的な実装例です:

php
function create_custom_post_type() {
    register_post_type('news',
        array(
            'labels' => array(
                'name' => 'お知らせ',
                'singular_name' => 'お知らせ',
                'add_new' => '新規追加',
                'add_new_item' => '新規お知らせを追加',
                'edit_item' => 'お知らせを編集',
                'view_item' => 'お知らせを表示'
            ),
            'public' => true,
            'has_archive' => true,
            'menu_position' => 5,
            'supports' => array(
                'title',
                'editor',
                'thumbnail',
                'excerpt'
            )
        )
    );
}
add_action('init', 'create_custom_post_type');

このコードを子テーマのfunctions.phpに追加することで、基本的なカスタム投稿タイプが作成できます。

主要なパラメータの設定方法

register_post_type関数で設定できる主要なパラメータを詳しく見ていきましょう:

php
$args = array(
    'labels' => array(
        'name' => 'お知らせ', // 管理画面での表示名
        'singular_name' => 'お知らせ', // 単数形の表示名
        'add_new' => '新規追加',
        'add_new_item' => '新規お知らせを追加',
        'edit_item' => 'お知らせを編集',
        'view_item' => 'お知らせを表示',
        'search_items' => 'お知らせを検索',
        'not_found' => 'お知らせが見つかりません',
        'not_found_in_trash' => 'ゴミ箱にお知らせはありません'
    ),
    'public' => true, // 公開を有効化
    'has_archive' => true, // アーカイブページを有効化
    'menu_position' => 5, // メニューの表示位置
    'menu_icon' => 'dashicons-megaphone', // アイコンの設定
    'supports' => array(
        'title', // タイトル
        'editor', // エディター
        'thumbnail', // アイキャッチ画像
        'excerpt', // 抜粋
        'custom-fields' // カスタムフィールド
    ),
    'show_in_rest' => true, // Gutenbergエディタを有効化
    'hierarchical' => false, // 階層構造の無効化
    'rewrite' => array('slug' => 'news') // パーマリンクの設定
);

各パラメータの意味と設定値について詳しく説明します:

  • public: カスタム投稿タイプを一般公開するかどうかを設定
  • has_archive: アーカイブページ(一覧ページ)の作成を制御
  • menu_position: 管理画面でのメニュー表示位置を指定(5は投稿の下)
  • supports: 投稿画面で利用可能な機能を指定
  • show_in_rest: ブロックエディター(Gutenberg)対応の設定

セキュリティとデバッグのポイント

functions.phpでカスタム投稿タイプを実装する際は、いくつかの重要な注意点があります。適切な実装を行うことで、安全で安定したカスタム投稿タイプを作成できます。

まず、カスタム投稿タイプの登録は適切なタイミングで行う必要があります。WordPressの初期化時に実行されるinitフックを使用することで、必要なコンポーネントがすべて読み込まれた後に処理が実行されます。

php
// initフックで登録することで、適切なタイミングで実行される
add_action('init', 'create_custom_post_type');

次に、パーマリンクの設定に関する注意点です。カスタム投稿タイプを新規作成したり、設定を変更したりした後は、必ずパーマリンクの再設定が必要です。これを怠ると、カスタム投稿タイプのURLが正しく機能しない可能性があります。管理画面の「設定」→「パーマリンク設定」で設定を保存し直すことで、新しいURL構造が反映されます。

命名規則も重要なポイントです。カスタム投稿タイプの名前には、WordPressの予約語を使用できません。また、他のプラグインと名前が衝突しないよう、独自のプレフィックスをつけることをおすすめします。

php
// 予約語を避け、わかりやすい名前をつける
register_post_type('my_news', // OK - プレフィックスをつけた例
register_post_type('post', // NG - 予約語のため使用不可

最後に、エラーハンドリングについても考慮が必要です。既に同じ名前のカスタム投稿タイプが登録されていないかチェックすることで、重複登録によるエラーを防ぐことができます。

php
// 登録状況をチェックする
if (!post_type_exists('my_news')) {
    register_post_type('my_news', $args);
}

このようなチェックを入れることで、他のプラグインとの競合を防ぎ、より安定した運用が可能になります。また、開発時にはWP_DEBUGを有効にし、エラーログを確認することで、実装上の問題を早期に発見することができます。

これらのポイントに注意を払いながら実装することで、安全で保守性の高いカスタム投稿タイプを作成することができます。特に本番環境への反映時は、十分なテストを行い、すべての機能が正しく動作することを確認してください。

タクソノミーによるカスタム投稿タイプの記事管理の方法

カスタム投稿タイプを作成したら、次は記事を効率的に分類する方法を考えましょう。WordPressではタクソノミー(分類)機能を使って、記事を体系的に整理することができます。通常の投稿におけるカテゴリやタグのように、カスタム投稿タイプ専用の分類方法を作ることができます。

カスタムタクソノミーの設定

カスタムタクソノミーは、Custom Post Type UIプラグインまたはfunctions.phpで設定できます。まずはプラグインでの設定方法を見てみましょう。

Custom Post Type UIの場合:

  1. 管理画面の「CPT UI」→「タクソノミーを追加」を選択
  2. タクソノミー名とラベルを設定
  3. 適用する投稿タイプを選択

[Custom Post Type UIのタクソノミー設定画面のスクリーンショット]

functions.phpで実装する場合は、以下のようなコードを使用します:

php
function create_custom_taxonomy() {
    register_taxonomy(
        'event_category', // タクソノミーのスラッグ
        'event', // 適用する投稿タイプ
        array(
            'label' => 'イベントカテゴリー',
            'hierarchical' => true, // カテゴリー形式
            'public' => true,
            'show_in_rest' => true, // ブロックエディタ対応
            'rewrite' => array('slug' => 'event-cat')
        )
    );
}
add_action('init', 'create_custom_taxonomy');

このコードでは、「イベント」投稿タイプに対して「イベントカテゴリー」というタクソノミーを作成しています。

階層構造の活用方法

カスタムタクソノミーでは、hierarchical パラメータを true に設定することで、カテゴリーのような階層構造を持たせることができます。これにより、以下のような分類が可能になります:

code
イベント
├─ セミナー
│   ├─ 初心者向け
│   └─ 上級者向け
└─ 展示会
    ├─ 製品展示
    └─ アート展示

この階層構造を活用することで、コンテンツを段階的に整理できます。たとえば、企業サイトの実績紹介では、業種別に大分類を作り、その下に具体的なサービスカテゴリーを配置するといった使い方ができます。

管理画面では、通常のカテゴリーと同じように、親子関係をドラッグ&ドロップで簡単に設定できます。これにより、サイトの成長に合わせて柔軟に分類構造を変更することができます。

タクソノミーの表示設定

作成したカスタムタクソノミーは、テンプレートファイルを使ってフロントエンドに表示させることができます。デフォルトでは以下のテンプレートファイルが使用されます:

  • taxonomy-{タクソノミー名}.php:タクソノミーアーカイブページ
  • archive-{投稿タイプ名}.php:投稿タイプのアーカイブページ
  • single-{投稿タイプ名}.php:個別記事ページ

タクソノミーの一覧を表示するには、以下のようなコードを使用します:

php
<?php
$terms = get_terms('event_category', array(
    'hide_empty' => false
));
if (!empty($terms) && !is_wp_error($terms)) {
    echo '<ul>';
    foreach ($terms as $term) {
        echo '<li><a href="' . get_term_link($term) . '">';
        echo $term->name;
        echo '</a></li>';
    }
    echo '</ul>';
}
?>

また、個別記事ページでそのカスタム投稿のタクソノミー情報を表示するには:

php
<?php
$terms = get_the_terms(get_the_ID(), 'event_category');
if ($terms && !is_wp_error($terms)) {
    foreach ($terms as $term) {
        echo '<a href="' . get_term_link($term) . '">' . $term->name . '</a>';
    }
}
?>

このように、カスタムタクソノミーを活用することで、カスタム投稿タイプのコンテンツを効率的に分類・管理し、ユーザーにとって使いやすい形で情報を提供することができます。設定時は必ずパーマリンクを更新し、実際のサイト上で正しく表示されることを確認してください。

表示と運用のカスタマイズ

WordPressのカスタム投稿タイプを作成した後は、コンテンツを効果的に表示し、使いやすいサイト作りを目指しましょう。ここでは、見た目のカスタマイズから運用面での最適化まで、実践的な方法を説明します。

テンプレートファイルのカスタマイズ

カスタム投稿タイプの表示をカスタマイズするには、専用のテンプレートファイルを作成します。子テーマに以下のファイルを作成することで、ループで投稿データを呼び出して表示させ、独自のデザインを適用できます:

  • archive-{投稿タイプ名}.php:一覧ページ用
  • single-{投稿タイプ名}.php:個別記事ページ用

例えば、「お知らせ」(投稿タイプ名:news)の一覧ページをカスタマイズする場合:

php
<?php
// archive-news.php
get_header(); ?>

<div class="news-archive">
    <h1 class="page-title">お知らせ一覧</h1>

    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
        <article class="news-item">
            <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
            <div class="news-meta">
                <time><?php the_time('Y年m月d日'); ?></time>
                <?php
                $terms = get_the_terms(get_the_ID(), 'news_category');
                if ($terms) {
                    echo '<span class="category">' . $terms[0]->name . '</span>';
                }
                ?>
            </div>
            <?php the_excerpt(); ?>
        </article>
    <?php endwhile; endif; ?>

    <?php the_posts_pagination(); ?>
</div>

<?php get_footer(); ?>

ウィジェットとメニューの設定

カスタム投稿タイプの記事を効果的に表示するために、ウィジェットとメニューを活用しましょう。

サイドバーに最新の投稿を表示する例:

php
// functions.phpに追加
register_sidebar(array(
    'name' => 'お知らせサイドバー',
    'id' => 'news-sidebar',
    'description' => 'お知らせページのサイドバー',
    'before_widget' => '<div class="widget">',
    'after_widget' => '</div>',
    'before_title' => '<h3 class="widget-title">',
    'after_title' => '</h3>'
));

メニューにカスタム投稿タイプのアーカイブページを追加するには、「カスタムリンク」を使用します。URLは「http://サイトのURL/投稿タイプのスラッグ」の形式で設定します。

また、管理画面の「外観」→「メニュー」で「表示オプション」を開き、作成したカスタム投稿タイプにチェックを入れることで、直接メニューに追加できるようになります。

パフォーマンスとSEOの最適化

カスタム投稿タイプを使用する際は、以下の点に注意してパフォーマンスとSEOを最適化します:

  1. パーマリンク構造の最適化
php
// functions.phpでスラッグをカスタマイズ
'rewrite' => array(
    'slug' => 'news',
    'with_front' => false
)

この設定により、SEOに最適化されたURLを作成できます。

  1. メタデータの設定
php
// single-news.phpに追加
add_action('wp_head', function() {
    if (is_singular('news')) {
        // メタディスクリプションを設定
        $excerpt = get_the_excerpt();
        echo '<meta name="description" content="' . esc_attr($excerpt) . '">';
    }
});
  1. キャッシュの活用 カスタム投稿タイプのアーカイブページには、必要に応じてキャッシュプラグインを使用します。ただし、更新頻度の高いコンテンツの場合は、キャッシュの有効期限を適切に設定する必要があります。
  2. 画像の最適化 アイキャッチ画像などは、適切なサイズで出力するようにset_post_thumbnail_sizeを使用します:
php
add_action('after_setup_theme', function() {
    add_image_size('news-thumbnail', 800, 450, true);
});

これらの設定により、カスタム投稿タイプを使用したページの読み込み速度が改善され、検索エンジンでの表示も最適化されます。また、定期的にGoogle Search ConsoleやGoogle Analytics等で、カスタム投稿タイプページのパフォーマンスと検索順位をモニタリングすることをおすすめします。

これらの最適化により、ユーザー体験が向上し、より多くのアクセスを獲得することができます。ただし、過度な最適化はかえって逆効果になる可能性があるため、サイトの規模や目的に応じて適切なバランスを取ることが重要です。