WordPressのカスタム投稿タイプの詳細な説明

3分で読了
2026-03-14
2026-06-04
2,730
以下のリンクからお買い物をしていただくと、コミッションを差し上げます。.

WordPressのカスタム投稿タイプの詳細な説明

ワードプレスのデフォルトの記事タイプpostそしてページの種類pageほとんどのコンテンツを管理するには十分ですが、製品、ポートフォリオ、イベント、チームなどの特定のコンテンツを構造化して表示する必要がある複雑なウェブサイトでは、その機能が不十分になってきます。カスタム記事タイプの登場は、この中心的な問題を解決するためのものであり、開発者は「記事」や「ページ」を超えて、あらゆる種類のコンテンツに独自の管理バックエンド、フロントエンドの表示、および検索ロジックを作成することができます。

カスタム記事タイプを利用すると、「製品」に個別の公開インターフェイスを追加したり、「チームメンバー」に専用のプロフィール入力フィールドを作成したり、これらのコンテンツに独自のURL構造、分類方法、テンプレートファイルを割り当てることができます。これにより、コンテンツ管理の明確性と効率性が大幅に向上するだけでなく、エンタープライズレベルのカスタマイズが可能なWordPressサイトを構築するための不可欠な技術基盤となります。

なぜカスタム記事タイプが必要なのか?

カスタム記事タイプを使用すると、さまざまな種類のコンテンツを論理的に分離することができ、多くの面で大きな利点が得られます。

推薦図書 WooCommerceを深く解析:効果的なEコマースウェブサイトをゼロから構築するための完全なガイド

コンテンツ管理の明確な分離を実現する。

あなたのウェブサイトにブログ、製品の展示、ニュース告知、成功例がすべて含まれていて、すべてをデフォルトの「記事」で管理しようとすると、バックエンドが混乱してしまいます。異なる種類のコンテンツが同じリストに混在するので、編集や検索が非常に面倒です。

UltaHostのWordPressホスティングサービス
30日間の返金保証、無制限の帯域幅とデータベースサービス、無料のDDoS防御機能が付きます。3年契約をすると、501TPから4Tまでのプランで割引が適用されます。

別個の「製品」と「ケース」タイプを作成した後、管理者は左側のメニューで別個の「製品」と「ケース」メニュー項目を表示できます。これらをクリックすると、管理画面は記事管理画面に似たものになりますが、完全に別個で互いに干渉しません。この分離により、コンテンツの組織が整然とされ、管理の複雑さが大幅に軽減されます。

独自のフィールドとメタデータをカスタマイズする。

デフォルトの記事タイプには、タイトル、本文、要約、カテゴリ、タグなどの共通フィールドが含まれています。「製品」の場合、価格、仕様、在庫などのフィールドが必要になる場合があります。「イベント」の場合、開始時間、終了時間、場所などが必要になります。

カスタム記事タイプは、高度なカスタムフィールドなどのプラグインやコードと組み合わせることで、特定のコンテンツタイプに独自のメタデータフィールドを簡単に追加することができます。これらのフィールドはバックエンドでフォーム形式で表示され、フロントエンドではテンプレートタグを使って柔軟に呼び出すことができ、コンテンツ構造の深いカスタマイズが可能になります。

独立したURL構造とテンプレートシステムを作成する。

カスタム記事タイプでは、独自のURL別名(スラッグ)を定義できます。例えば、製品タイプの固定リンクを次のように設定することができます。/product/%postname%イベントを設定する/event/%postname%これにより、URLがよりわかりやすく、SEOに適したものになり、ユーザーがウェブサイトの構造を理解しやすくなります。

推薦図書 WooCommerceのカスタムページテンプレートをマスターする:ゼロからの実践的な開発ガイド

さらに重要なのは、WordPressのテンプレート階層システムは、カスタム記事タイプに合わせたテンプレートファイルを優先的に検索するのです。例えば、「名前」という名前の記事の場合、WordPressはまず「名前」という名前のテンプレートファイルを検索するのです。productシステムは順番に検索を行い、そのタイプに合わせて結果を返します。single-product.phpsingle.phpsingular.phpなどなど。これにより、1つのテンプレートで複雑な条件判定ロジックを記述する必要なく、さまざまな種類のコンテンツに合わせて全く異なるフロントエンドの表示スタイルを設計することができます。

カスタム記事タイプを作成する 2 つの方法

WordPressでは、カスタム投稿タイプを作成するための2つの主な方法があります。1つはテーマのfunctions.phpファイルでコードを登録する方法、もう1つは強力な専用プラグインを使用する方法です。

プラグインを利用してすばやく作成することができます。

コード開発に慣れていない人や、迅速に公開したい人にとって、プラグインの使用は最も簡単な方法です。Custom Post Type UIとToolset Typesは、いずれも人気のあるプラグインです。これらのプラグインは、直観的なユーザーインターフェイスを提供し、記事の種類、タグ、アイコン、公開設定、アーカイブページのサポートなど、すべてのパラメータをフォームに入力して定義することができます。

hosting.com 共有ホスティング
AMD EPYC CPU、NVMe SSDストレージ、LiteSpeedによる高いパフォーマンス、24時間365日の専門家による社内サポート、SSL、ブルートフォース、マルウェア、DDoS保護などの高度なセキュリティ対策、最大73%のコスト削減

この方法の利点は、コードを書く必要がなく、設定が即座に有効になり、プラグインが提供するメタフィールド管理機能とうまく統合されることです。しかし、欠点も明らかです。機能はプラグインが提供するオプションに限定され、カスタマイズの度合いが不十分かもしれません。また、将来テーマを変更したり、プラグインを無効にしたりすると、データはデータベースに残りますが、登録機能は失われ、再宣言するための追加コードが必要になります。

コード関数で登録する(推奨)

安定性、制御性、パフォーマンスを追求する開発者にとって、テーマやカスタムプラグインにコードを登録する方法は、より専門的で推奨される方法です。この方法の中心は、WordPressが提供する機能を利用することです。 register_post_type() 関数。

あなたは、登録コードをテーマのどこかに入れる必要があります。functions.phpファイル内で、またはより良い方法として、独立したサイト機能プラグインを作成してください。そうすることで、機能とテーマが分離され、テーマを変更しても、カスタム記事タイプとそのデータは無傷の状態で機能し続けます。

推薦図書 ウェブサイト構築の全てのプロセスを解説:専門レベルのウェブサイトをゼロから構築するための実用的なテクニカルガイド

以下に、「製品」カスタム記事タイプを作成するための基本コードの例を示します。

function create_product_post_type() {
    $labels = array(
        'name'               => '产品',
        'singular_name'      => '产品',
        'menu_name'          => '产品管理',
        'add_new'            => '添加新产品',
        'add_new_item'       => '添加新产品',
        'edit_item'          => '编辑产品',
        'new_item'           => '新产品',
        'view_item'          => '查看产品',
        'search_items'       => '搜索产品',
        'not_found'          => '未找到产品',
        'not_found_in_trash' => '回收站中无产品',
    );

    $args = array(
        'labels'              => $labels,
        'public'              => true, // 是否公开
        'has_archive'         => true, // 是否有归档页
        'menu_icon'           => 'dashicons-cart', // 后台菜单图标
        'menu_position'       => 5, // 菜单位置
        'supports'            => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'), // 支持的功能
        'rewrite'             => array('slug' => 'products'), // URL别名
        'show_in_rest'        => true, // 是否在古腾堡编辑器和REST API中启用
    );

    register_post_type('product', $args); // 注册,'product'为内部标识符
}
add_action('init', 'create_product_post_type'); // 在初始化时执行函数

このコードはregister_post_type()この関数は、「%s」という名前で登録されました。product記事の種類を選択し、表示タグ、基本機能、サポートされるモジュールを設定します。これを追加してください。functions.phpその後、バックエンドを更新すると、新しく追加された「製品管理」メニューが表示されます。

インターサーバー共有ホスティング
共有ホスティング月$2.50米ドル, 最初の月$0.1米ドルプロモーションコードtryinterserver, 461クラウドアプリケーションスクリプト, 1クリックインストール.

高度なカスタマイズとテンプレートのカスタマイズ

基本型の登録は最初のステップにすぎません。カスタム記事タイプを実際に強力かつ使いやすくするには、高度な設定や専用テンプレートの作成が必要になります。

構成の特徴的なパラメータと関連する分類法

register_post_type()関数の$argsパラメータ配列には数十の設定項目が含まれています。主な高度なオプションとしては、次のようなものがあります。
* ‘publicly_queryable’個別の記事にアクセスできるかどうかは、フロントエンドのURLから判断できます。
* ‘exclude_from_search’この種の記事をサイト内の検索結果から除外するかどうか。
* ‘capability_type’このタイプの権限機能を定義することで、細かい権限制御が可能になります。
* ‘taxonomies’既存のカテゴリやカスタムカテゴリに関連付けます。例えば、「製品」にカスタムの「製品カテゴリ」を関連付けます。“product_catそしてタグproduct_tag記事のカテゴリ管理と同様に、製品もカテゴリに分類できます。

カスタム分類法を作成する。

利用する register_taxonomy() 関数は、カスタム記事タイプに専用のカテゴリやタグを作成することができます。例えば、「製品」に「製品シリーズ」カテゴリを作成する場合などです。

function create_product_taxonomy() {
    register_taxonomy(
        'product_series', // 分类法标识符
        'product', // 绑定的文章类型
        array(
            'label' => '产品系列',
            'rewrite' => array('slug' => 'product-series'),
            'hierarchical' => true, // 是否为层级式(类似分类)
            'show_in_rest' => true,
        )
    );
}
add_action('init', 'create_product_taxonomy');

専用テンプレートファイルの開発

テンプレートカスタマイズはフロントエンドの表示の中心です。WordPressのテンプレート階層に従って、テーマに応じたテンプレートファイルを作成する必要があります。例えば:
1. アーカイブページテンプレートの作成archive-product.phpカスタム定義からyoursite.com/products/このページは、全ての製品を一覧表示するためのものです。
2. 1つの記事のテンプレート:作成するsingle-product.php個別の製品の詳細ページから、例えばyoursite.com/products/sample-product/
3. 分類ファイルテンプレート:作成taxonomy-product_series.php特定の製品シリーズの下にあるすべての製品のリストを表示するために。

これらのテンプレートファイルでは、標準のWordPressのループを使用することができますが、通常、製品の価格、仕様などの固有の情報を表示するには、カスタムフィールドのクエリが必要になります。

メインクエリを変更するには、pre_get_postsを使用します

製品のアーカイブページで、ページあたりの表示件数や並び順などのデフォルトのクエリパラメータを調整する必要がある場合もあります。この場合、テンプレートファイルのクエリを直接変更するのではなく、代わりに次の方法を使用する必要があります。 pre_get_posts このアクションフックは、メインクエリを変更するもので、WordPress開発のベストプラクティスです。

function modify_product_archive_query($query) {
    if (!is_admin() && $query->is_main_query() && is_post_type_archive('product')) {
        $query->set('posts_per_page', 12); // 每页显示12个产品
        $query->set('orderby', 'date'); // 按日期排序
        $query->set('order', 'DESC'); // 降序排列
    }
}
add_action('pre_get_posts', 'modify_product_archive_query');

概要

カスタム投稿タイプは、WordPressがブログシステムから強力なコンテンツ管理システムに進化する際の中心機能の1つです。論理的な分離、フィールドのカスタマイズ、テンプレートの専用化により、複雑なコンテンツの管理と表示に優れたソリューションを提供します。プラグインを迅速に設定するか、register_post_type()関数による深いコード制御により、開発者はプロジェクトの要件に合わせた実装パスを見つけることができます。カスタム分類法、高度なフィールド、テンプレート階層に準拠したテーマ開発と組み合わせて、構造が明確で機能が強く、ユーザーエクスペリエンスに優れた各種の専門ウェブサイトを構築することができます。この機能をマスターし、うまく活用することは、すべてのWordPress開発者が成長するための必須の道です。

FAQ よくある質問

カスタム記事タイプのデータはデータベースのどこに保存されているのでしょうか?

カスタム記事タイプのすべての記事(コンテンツ)は、主にここに保存されています。wp_postsデータシートでは、そのpost_typeフィールドの値は、登録時に定義した識別子です(例えば、productこれらの記事に関連する分類情報はここに保存されています。wp_term_relationshipswp_term_taxonomy表内。カスタムフィールド(メタデータ)を通じて追加された情報は、ここに保存されます。wp_postmetaデータシートの中に。

カスタム記事タイプを作成するプラグインを無効にした場合、コンテンツは失われるのでしょうか?

記事の内容自体は通常失われることはないのですが、それらはすでに保存されているためです。wp_posts表面的には。しかし、その記事タイプの登録コード(プラグインによって提供される)が無効になっているため、WordPressはそのタイプを認識しなくなっています。その結果、バックエンドの管理メニューが消え、これらのコンテンツをバックエンドで表示および管理できなくなり、フロントエンドの記事リンクも正常にアクセスできなくなる可能性があります。このような事態を防ぐために、重要な登録コードをサブテーマに移動することをお勧めします。functions.phpまたは、カスタム機能プラグインの中で。

既存のカスタム記事タイプの固定リンク構造をどのように変更するのですか?

固定リンク(Permalink)の構造を変更するには、登録時に更新が必要です。rewriteパラメータ。登録時に設定した内容を変更することができます。register_post_type()関数の中で‘rewrite’ => array(‘slug’ => ‘new-slug’)変更後、WordPressのバックエンドにある「設定」->「固定リンク」ページに移動し、何も変更せずに「変更を保存」ボタンをクリックする必要があります。この操作により、書き換えルールが更新され、新しいリンク構造が有効になります。

カスタム記事タイプ用の独立したブロックエディターテンプレートを作成することはできますか?

はい、完全に可能です。WordPress 5.0でグーテンベルグエディターが導入され、フルサイトエディティング(FSE)がサポートされて以来、カスタム記事タイプに専用のブロックテンプレートやテンプレートパーツを作成することができます。これは、FSEをサポートするブロックテーマ(Twenty Twenty-Threeなど)を使用する場合に特にわかりやすいです。テーマのtemplatesフォルダの下に、次のようなものを作成してください。single-product.htmlこのようなブロックテンプレートファイル、またはテーマを通じて。theme.jsonファイルや登録パラメータの中に‘template’‘template_lock’オプションを設定することで、このタイプのすべての記事に統一されたブロックレイアウトを定義することができます。