welcome!

私たちは、戦略、創造性、テクノロジーを融合させ、絶えず変化し続けるデジタル世界において、ブランドの成長、顧客とのつながり、そして差別化を支援します。

Get in touch

【第8回】WordPressのカスタム投稿タイプとタクソノミーの作り方|ACFを活用したコンテンツ設計

Author

AQUACUBE

2026年10月21日
この記事をシェア
WordPressのカスタム投稿タイプとタクソノミーの作り方

はじめに:WordPressはブログだけのシステムではない

WordPressには、標準で「投稿」と「固定ページ」というコンテンツ管理機能が用意されています。

ブログやお知らせを掲載する程度であれば、この2つで十分な場合もあります。

しかし、企業サイトや店舗サイトなどを制作していると、次のようなコンテンツを管理する必要が出てきます。

  • 制作実績・施工事例
  • 商品・サービス
  • スタッフ紹介
  • イベント情報
  • よくある質問(FAQ)

これらをすべて通常の「投稿」で管理すると、管理画面が煩雑になり、コンテンツの分類や表示制御も複雑になりがちです。

そこで役立つのが、**カスタム投稿タイプ(Custom Post Type)**です。

さらに、タクソノミーやカスタムフィールドを組み合わせることで、WordPressを目的に応じたコンテンツ管理システムとして活用できます。

1. カスタム投稿タイプとは?

カスタム投稿タイプとは、WordPressに独自のコンテンツ管理機能を追加する仕組みです。

例えば、制作会社のWebサイトを考えてみましょう。

通常の投稿はブログ記事に使用し、制作実績は独立した管理メニューで管理したいとします。

その場合、portfolio というカスタム投稿タイプを作成します。

投稿タイプ用途
postブログ・お知らせ
page会社概要・お問い合わせ
portfolio制作実績
staffスタッフ紹介
eventイベント情報

カスタム投稿タイプを登録すると、管理画面に専用のメニューを追加できます。

ブログ記事と制作実績を別々に管理できるため、クライアントにとっても更新しやすい構成になります。

カスタム投稿タイプを作成する

カスタム投稿タイプは、register_post_type() 関数で登録します。

次のコードは、制作実績を管理する portfolio の登録例です。

function aquacube_register_portfolio() {

    $args = array(
        'labels' => array(
            'name'          => '制作実績',
            'singular_name' => '制作実績',
            'add_new_item'  => '制作実績を追加',
            'edit_item'     => '制作実績を編集',
        ),
        'public'       => true,
        'has_archive'  => true,
        'menu_icon'    => 'dashicons-portfolio',
        'show_in_rest' => true,
        'supports'     => array(
            'title',
            'editor',
            'thumbnail',
            'excerpt',
            'revisions',
        ),
        'rewrite' => array(
            'slug' => 'portfolio',
        ),
    );

    register_post_type( 'portfolio', $args );
}

add_action( 'init', 'aquacube_register_portfolio' );

このコードを登録すると、WordPressの管理画面に「制作実績」というメニューが追加されます。

主な設定項目

設定役割
labels管理画面に表示する名称
public投稿タイプの公開設定
has_archiveアーカイブページの有効化
menu_icon管理画面のアイコン
show_in_restREST APIへの公開設定
supports使用する編集機能
rewriteURLの設定

show_in_rest を true にすると、REST APIに対応し、ブロックエディターを使用するための条件の一つを満たします。

なお、カスタム投稿タイプの登録は、テーマの functions.php でも可能ですが、テーマを変更してもコンテンツ管理機能を維持したい場合は、専用プラグインとして実装する方法がおすすめです。

登録後にURLが404になる場合は、「設定 → パーマリンク」から設定を保存し直すことで、リライトルールを再生成できます。

2. タクソノミーとは?

カスタム投稿タイプを作成したら、次に考えたいのがコンテンツの分類です。

例えば、制作実績を次のように分類したい場合です。

業種

  • 医療
  • 飲食
  • 建築
  • その他

制作種別

  • コーポレートサイト
  • ランディングページ
  • ECサイト

WordPressには、標準で「カテゴリー」と「タグ」が用意されています。

これらもタクソノミーの一種です。

独自の分類を作成する仕組みを、**カスタムタクソノミー(Custom Taxonomy)**と呼びます。

タクソノミーを登録する

カスタムタクソノミーは、register_taxonomy() 関数で登録します。

function aquacube_register_portfolio_taxonomy() {

    register_taxonomy(
        'portfolio_category',
        array( 'portfolio' ),
        array(
            'labels' => array(
                'name'          => '業種',
                'singular_name' => '業種',
            ),
            'public'       => true,
            'hierarchical' => true,
            'show_in_rest' => true,
            'rewrite'      => array(
                'slug' => 'portfolio-category',
            ),
        )
    );
}

add_action(
    'init',
    'aquacube_register_portfolio_taxonomy'
);

この例では、portfolio に「業種」という分類を追加しています。

hierarchical を true にすると、カテゴリーのような階層構造を持つタクソノミーになります。

一方、false にすると、タグのような非階層型になります。

タクソノミーとタームの違い

ここは混同しやすいポイントです。

  • タクソノミー:分類の仕組み
  • ターム:その分類に登録する個々の項目

例えば「業種」がタクソノミーで、「医療」「飲食」「建築」がタームです。

この違いを理解すると、WordPressのコンテンツ設計が整理しやすくなります。

3. カスタムフィールドとは?

カスタム投稿タイプとタクソノミーによって、コンテンツの種類と分類を管理できるようになりました。

しかし、制作実績にはタイトルや本文以外にも、さまざまな情報が必要です。

例えば、次のような項目です。

フィールド名内容
client_nameクライアント名
project_urlWebサイトのURL
project_year制作年
technology使用技術
project_gallery制作画像

これらを管理するのが、カスタムフィールドです。

WordPressには標準のカスタムフィールド機能がありますが、実務では編集画面を使いやすくするために、ACF(Advanced Custom Fields)がよく利用されます。

ACFを使うメリット

ACFでは、テキスト・画像・選択項目など、さまざまな形式の入力欄を作成できます。

例えば、制作実績の編集画面に以下の入力欄を設けられます。

  • クライアント名:テキスト
  • WebサイトURL:URL
  • 制作年:数値
  • 使用技術:チェックボックス
  • ギャラリー:画像関連フィールド

※ギャラリーフィールドやリピーターフィールドなど、一部の機能はACF PROで提供されています。

クライアントは、あらかじめ用意された入力欄に情報を登録するだけで、Webサイトを更新できます。

特にオリジナルテーマ制作では、入力する情報と表示デザインを分離できることが大きなメリットです。

4. ACFのデータをテンプレートに表示する

ACFで登録した情報は、テーマのテンプレートから取得できます。

例えば、クライアント名と制作年を表示する場合は、次のように記述します。

<?php
$client_name  = get_field( 'client_name' );
$project_year = get_field( 'project_year' );
?>

<?php if ( $client_name ) : ?>
    <p>
        クライアント:
        <?php echo esc_html( $client_name ); ?>
    </p>
<?php endif; ?>

<?php if ( $project_year ) : ?>
    <p>
        制作年:
        <?php echo esc_html( $project_year ); ?>
    </p>
<?php endif; ?>

get_field() は、ACFで登録したフィールドの値を取得する関数です。

取得した値をHTMLに出力するときは、内容に応じて esc_html() や esc_url() などを使い、適切にエスケープします。

こうした処理をテンプレートに組み込むことで、管理画面から登録した情報を決まったデザインで表示できます。

5. カスタム投稿タイプのテンプレートを作成する

カスタム投稿タイプを登録したら、次は表示側のテンプレートを作成します。

第5回で解説したテンプレート階層の仕組みが、ここで役立ちます。

クラシックテーマの場合、portfolio には次のようなテンプレートを用意できます。

my-theme/
├── functions.php
├── archive-portfolio.php
├── single-portfolio.php
└── taxonomy-portfolio_category.php

それぞれの役割は次のとおりです。

テンプレート用途
archive-portfolio.php制作実績一覧
single-portfolio.php制作実績の詳細
taxonomy-portfolio_category.php業種別の一覧

※ブロックテーマでは、HTMLテンプレートを使用する構成になります。

制作実績一覧を表示する

archive-portfolio.php では、WordPressのメインクエリとループを利用して投稿を表示できます。

<?php get_header(); ?>

<main class="portfolio-archive">

    <h1>制作実績</h1>

    <?php if ( have_posts() ) : ?>

        <div class="portfolio-grid">

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

                <article class="portfolio-card">

                    <a href="<?php the_permalink(); ?>">

                        <?php
                        if ( has_post_thumbnail() ) {
                            the_post_thumbnail( 'medium_large' );
                        }
                        ?>

                        <h2><?php the_title(); ?></h2>

                    </a>

                </article>

            <?php endwhile; ?>

        </div>

        <?php the_posts_pagination(); ?>

    <?php else : ?>

        <p>制作実績はまだありません。</p>

    <?php endif; ?>

</main>

<?php get_footer(); ?>

第6回で紹介した have_posts() と the_post() が、ここでも使われています。

このように、カスタム投稿タイプもWordPressの標準的なループの仕組みで表示できます。

6. WP_Queryで特定の業種だけを取得する

例えば、トップページに「医療関連の制作実績」を3件だけ表示したい場合を考えてみましょう。

このようなときは、WP_Query の tax_query を利用します。

<?php
$args = array(
    'post_type'      => 'portfolio',
    'posts_per_page' => 3,
    'orderby'        => 'date',
    'order'          => 'DESC',
    'tax_query'      => array(
        array(
            'taxonomy' => 'portfolio_category',
            'field'    => 'slug',
            'terms'    => 'medical',
        ),
    ),
);

$portfolio_query = new WP_Query( $args );
?>

<?php if ( $portfolio_query->have_posts() ) : ?>

    <?php
    while ( $portfolio_query->have_posts() ) :
        $portfolio_query->the_post();
    ?>

        <article>
            <a href="<?php the_permalink(); ?>">
                <h3><?php the_title(); ?></h3>
            </a>
        </article>

    <?php endwhile; ?>

<?php endif; ?>

<?php wp_reset_postdata(); ?>

このコードでは、次の条件で制作実績を取得しています。

  • 投稿タイプ:portfolio
  • 業種:medical
  • 表示件数:3件
  • 並び順:公開日の新しい順

tax_query を利用することで、特定のタームに属する投稿だけを抽出できます。

また、独自の WP_Query を使用した後は、wp_reset_postdata() を呼び出して投稿データを復元します。

7. カスタム投稿タイプ・タクソノミー・ACFの関係

ここまでの内容を整理すると、3つの機能はそれぞれ異なる役割を持っています。

機能役割制作実績の例
カスタム投稿タイプコンテンツの種類を定義する制作実績
タクソノミーコンテンツを分類する業種・制作種別
カスタムフィールド個別の情報を管理するクライアント名・制作年・URL

例えば、制作実績のデータは次のように整理できます。

制作実績(portfolio)
│
├── タイトル
├── 本文
├── アイキャッチ画像
│
├── 業種(タクソノミー)
│   ├── 医療
│   ├── 飲食
│   └── 建築
│
├── 制作種別(タクソノミー)
│   ├── Webサイト
│   ├── LP
│   └── ECサイト
│
└── カスタムフィールド(ACF)
    ├── クライアント名
    ├── WebサイトURL
    ├── 制作年
    ├── 使用技術
    └── ギャラリー

このように情報を整理しておけば、管理画面の使いやすさだけでなく、一覧ページや検索・絞り込み機能の実装にもつながります。

8. 実務では「管理しやすい設計」が重要

カスタム投稿タイプを作成すること自体は、それほど難しくありません。

しかし、実際のクライアントサイトでは、機能を追加する前の設計が重要です。

例えば、制作実績を登録するときに、クライアントが毎回HTMLを編集しなければならない構成では、更新の負担が大きくなります。

一方、必要な項目をあらかじめ用意しておけば、クライアントは情報を入力するだけで更新できます。

そのため、制作前に次の点を整理しておくことをおすすめします。

① 何を独立したコンテンツとして管理するか

ブログ・制作実績・スタッフ紹介など、更新目的の異なるコンテンツを整理します。

② 何を分類として管理するか

業種や制作種別など、一覧表示や絞り込みに使用する情報をタクソノミーとして設計します。

③ 何を入力項目として管理するか

クライアント名や制作年など、個別のデータをカスタムフィールドとして用意します。

④ どこまでクライアントが編集できるようにするか

更新頻度や担当者のスキルに合わせて、編集範囲を決めます。

すべてを自由に編集できるようにすることが、必ずしも使いやすさにつながるわけではありません。

編集する必要がある部分を、迷わず安全に更新できること。

これが、実務におけるWordPressのコンテンツ設計で重要な考え方だと思います。

まとめ:WordPressの強みはコンテンツを柔軟に設計できること

今回は、カスタム投稿タイプ・タクソノミー・カスタムフィールドについて解説しました。

カスタム投稿タイプを使えば、ブログ以外の独自コンテンツを管理できます。

タクソノミーを組み合わせることで、コンテンツを目的に応じて分類できます。

さらにACFを活用すれば、必要な入力項目を用意し、クライアントが更新しやすい管理画面を構築できます。

WordPressの魅力は、単にページを作成できることではありません。

Webサイトの目的に合わせて、コンテンツの管理方法そのものを設計できることも、大きな強みです。

オリジナルテーマ制作では、デザインだけでなく、こうしたコンテンツ設計まで考えることが、長く運用できるWebサイトにつながります。


次回予告|第9回

WordPressのカスタムフィールドを深く理解する|ACFの基本から柔軟コンテンツ・オプションページまで

次回は、今回紹介したACFをさらに掘り下げます。

テキストや画像などの基本フィールドから、リピーター、柔軟コンテンツ、オプションページまで、クライアントが更新しやすいWordPressサイトを構築するための考え方を解説します。