WordPressのカスタム投稿タイプ機能はとても強力な機能です。これは、WordPressが単なるブログツールではなくコンテンツ管理システムである理由で、特注のウェブサイトを作成するに必要なフレキシビリティを提供します。

しかし、混乱を引き起こす可能性もあります。WordPressのカスタム投稿タイプとは正確には何でしょうか?標準の投稿や固定ページとどう違うのでしょうか?作成方法は何でしょうか?作成したものの調整のし方やウェブサイトでの表示のし方は何でしょうか?WordPressでどのように保存されるのでしょうか?

本記事では、WordPressのカスタム投稿タイプの概要について詳しく述べます。よく知られている投稿タイプとの比較、作成方法、ウェブサイトでの表示ができるためのテーマテンプレートファイルの使い方法などをご紹介します。

具体的には次の内容をカバーします。

それでは始めましょう!

WordPressのカスタム投稿タイプとは?

WordPressのカスタム投稿タイプを説明するにはまず、より広いコンセプトである「投稿タイプ」を説明した方が良いでしょう。

投稿タイプとは、WordPressのさまざまな異なるタイプのコンテンツを分類する方法です。本記事では投稿と固定ページという2種類の最も普及している投稿タイプをご存じであることを前提としています。しかし、WordPressにはそれ以上の投稿タイプもあることをご存じでないかもしれません。

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

WordPress にはデフォルトで7つの主要な投稿タイプがあります。

  • 投稿
  • 固定ページ
  • 添付ファイル
  • リビジョン
  • ナビゲーションメニュー
  • カスタムCSS
  • 変更セット

変更セットは初耳で、カスタムCSSを使用しているが投稿タイプであることを思ったことのない方が多いかと思います。

ほとんどのWordPressユーザーや開発者にとって重要なのは、投稿、固定ページ、添付ファイル、リビジョン、ナビゲーションメニューの最初の5つのみです。

さて、投稿タイプの概要を一つずつ確認して理解しておきましょう。

WordPressの投稿タイプ:投稿

「投稿」とは、WordPressの最もよく使用されている投稿タイプです。投稿は動的なコンテンツであり、定期的に更新されるように設計されているものです。カテゴリやタグを追加すると、投稿は複数のアーカイブページに表示される他、ホームページやブログページにも表示されます。投稿はウェブサイトのコンテンツの大部分を占める場合が多いです。

注:WordPressでは、「投稿」という言葉には2つの意味があります。データベースでは、「投稿」とは固定ページ、添付ファイルなどのすべての投稿タイプのことを指します。一方、一般人にとっては「投稿」とはブログの投稿、つまり「投稿」という投稿タイプのことです。

WordPressの投稿タイプ:固定ページ

WordPressウェブサイトをお持ちの方は、「固定ページ」という投稿タイプもご存じでしょう。固定ページは静的コンテンツであり、投稿よりも長持ちで、頻繁に変更されない情報を提供するために設計されているものです。例えば、お問い合わせページや会社情報ページです。

固定ページにはカテゴリやタグを追加することはできないし、アーカイブページに表示されるように設計されていません。訪問者はナビゲーションメニューを使用して固定ページにアクセスします。

注:インターネット用語では、「ページ」とはウェブサイト上のあらゆる種類のページを指します。インターネットが最初に開発されたとき、HTMLで直接にコード化されなければならなかった静的コンテンツのみで構成されていました。そのため、「ウェブページ」とは、WordPressでいう固定ページをはじめ、アーカイブページ、投稿など、ウェブサイト上のあらゆる種類のページを指します。本記事では、「固定ページ」を記載すると、それはWordPressの用語である固定ページのことです。アーカイブページについても述べますが、アーカイブページは利用者がコンテンツを保存するために作成するページではありません。WordPressにより作成されます。

WordPressの投稿タイプ:添付ファイル

添付ファイルとは、ウェブサイトにアップロードされたメディアアイテムのことです。WordPressデータベースでは、これはメディアファイルそのものではなく、メディアファイルに関連するデータです。そのため、各添付ファイルには、独自のIDと、タイトル、説明、ALTテキストなどのメタデータがあります。

各添付ファイルにはまた、一意のURLのある独自の添付ファイルページもあります。添付ファイルのメディア編集画面でそのURLが確認できます。

WordPressの添付ファイル編集画面
WordPressの添付ファイル編集画面

添付ファイルは、画像、動画、pdfファイルなどのアップロードのことです。WordPress管理メニューの「メディア」からアクセスして編集したり、編集中に投稿や固定ページに直接アップロードしたりできます。投稿にアップロードした添付ファイルはすべて、「メディア」メニューに表示され、編集できるようになります。

WordPressの投稿タイプ:リビジョン

リビジョンはもう少し珍しい投稿タイプです。

投稿、固定ページ、添付ファイル、またはカスタム投稿タイプなどの新しいバージョンを保存するたびに、WordPressは投稿(または固定ページなど)の該当のバージョンを反映するリビジョンを作成します。

投稿や固定ページの編集画面にアクセスして、右側の「文書」タブを開くと、該当の投稿や固定ページのリビジョンが確認できます。ここには、投稿のリビジョン数を示す通知が表示されます。以下に、5つのリビジョンのある編集中の投稿のスクリーンショットを示します。

WordPressの投稿編集画面のリビジョン数
WordPressの投稿編集画面のリビジョン数

Gutenbergエディタをご利用のない方は、編集画面の一番下までスクロールダウンしてリビジョンのリストを確認することができます。

WordPressの旧型エディタ画面のリビジョンリスト
WordPressの旧型エディタ画面のリビジョンリスト

リビジョン」ボックスをクリックすると、投稿の2つの最新のバージョンの画面が表示されます。ここで、リビジョンを確認したり、投稿の以前のバージョンに戻ったりできます。

WordPressは時間の経過とともにウェブサイトのリビジョンを多数作成するため、データベースはリビジョンでいっぱいになります。(パフォーマンスを向上させるためにリビジョンを処理する方法についてにKinstaのガイドはこちらにあります。)ただし、リビジョンは他の投稿タイプと同様な投稿タイプであるため、保存方法も同様です。(後程説明いたします。)

WordPressの投稿タイプ:ナビゲーションメニュー

ナビゲーションメニュー(より正確にいうと、ナビゲーションメニューの項目)も投稿タイプです。

ナビゲーションメニューの各項目は、データベースの項目として保存されます。WordPressは、その項目のメタデータのおかげで、ナビゲーションメニューの項目であること、ナビゲーションメニューでの位置、そのリンク先などを正確に認識しています。

ナビゲーションメニューの項目の編集方法はその他の投稿タイプとは異なります。カスタマイザーまたはメニュー画面を使用して編集します。

WordPressの投稿タイプ:カスタムCSS

カスタマイザーを使用してカスタムCSSを追加する場合、作成する内容はこのカスタム投稿タイプを使用して保存されます。(「カスタムCSS」投稿タイプの)新しい投稿は、ウェブサイトの各テーマに関連するカスタムCSS用に保存され、WordPressは現在アクティブなテーマのもののみを使用します。

WordPressの投稿タイプ:変更セット

変更セットはリビジョンに少し似ていますが、投稿に適用されるものではなく、カスタマイザーに適用されるものです。カスタマイザーを使用して変更を行うと、その変更は下書きに似ている変更セットとして保存されます。

それでは、WordPressの投稿タイプをよく理解しておきましたので、次にWordPressのカスタム投稿タイプの詳細を調べましょう。

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

簡単にまとめましょう。投稿には2つの意味があります。

投稿タイプは、あるコンテンツが関連する広い意味での投稿の種類です。「投稿」はまた、「固定ページ」、「添付ファイル」、カスタム投稿タイプなどの投稿タイプでもあります。(わかりにくいですが、すぐに説明します)。

一方、カスタム投稿タイプは、ブログ投稿の意味での「投稿」の一種類ではありません。データベースに保存されている(すべての投稿タイプの)投稿という意味での投稿の一種類です。

WordPressのカスタム投稿タイプ:よくある使い方

これで、カスタム投稿タイプが何であるかを理解しました。しかし、どの場合に使用されるのでしょうか?それはもちろん、組み込みの投稿タイプのいずれにも当てはまらないコンテンツをウェブサイトに追加する場合です。

カスタム投稿タイプの一般的な例を次に示します。

上記は最もよくある使用方法ですが、これ以外の使用方法はないわけではありません。新しい種類のコンテンツに関するカスタム投稿タイプを使用するかどうかを決める際には、次の質問を自問しましょう。

新しいコンテンツをメインブログページに表示するのか、静的ページとして表示するのか、それとも別のアーカイブページに表示できるようにした方がいいのでしょうか?

場合によっては、カテゴリを使用して新しいコンテンツを分離するだけで十分かもしれません。例えば、ブログで「ケーススタディ」カテゴリを使用して独自のページに表示できるケーススタディを含めたいが、メインブログページにも表示したい場合があります。ただし、新しいコンテンツをブログの投稿とは別にしたい場合は、カスタム投稿タイプを作成するのが理にかなっています。

WordPressの投稿タイプの保存方法

カスタム投稿タイプの投稿は、標準の投稿(および固定ページなど)が保存されるのと同様に保存されます。これをもっと詳しく見てみましょう。

WordPressウェブサイトには、コンテンツと設定を保存するデータベーステーブルが多数あります。テーブルの最小数は12ですが、マルチサイトの場合や、テーブルを追加するプラグインがインストールされている場合には、テーブル数が増える場合あります。

WordPressのデータベースのテーブル
WordPressのデータベースのテーブル

上記のスクリーンショットでは、wp_postsとwp_postmetaのように、投稿と何らかの関係があるかのように見える2つのテーブルがあることがわかります。

wp_postsテーブルには、すべての投稿タイプのすべての投稿のコンテンツが保存されています。ブログの投稿、固定ページ、リビジョン、添付ファイル、またはカスタム投稿タイプのいずれかのデータであっても、そのデータはこのwp_postsテーブルに保存されます。

wp_postsテーブルのpost_typeフィールドに値があるため、WordPressが各投稿の投稿タイプを認識できます。値は、投稿タイプの名前に対応します。例えば、新しいブログ投稿を追加すると、WordPressがpost_typeが「post」である投稿をwp_postsテーブルに追加します。そしてたとえば、「product」というカスタム投稿タイプを登録すると、今後作成するすべての新しい商品は、post_typeフィールドの値が「product」である行をwp_postsテーブルで生成します。

wp_postmetaテーブルは、投稿に関するメタデータを保存するためのものです。次の4つのフィールドがあります。

  • meta_id:この項目のwp_postmetaテーブル内のID
  • post_id:このメタデータの項目が対応する投稿。一つの投稿はwp_postmetaテーブルに複数の行を持つことができます。
  • meta_key:この種類のメタデータのキー。たとえば、静的ページの場合、考えられるキーの1つは、どのページテンプレートが使用されているかを記録するpage_templateです。
  • meta_value:フィールドの値。たとえば、ページがデフォルトのページテンプレートを使用している場合、ここのmeta_valueは「default」になります。.

そのため、投稿に保存されるメタデータの種類は、投稿タイプによって異なります。

wp_postsに保存されるデータとwp_postmetaに保存されるデータが何であるかを覚える必要はありません。ただし、すべての投稿タイプが同じ場所に保存されているため、機能もほぼ同様であることを理解しておくと便利です。

カスタム投稿タイプのカスタム分類およびカスタムフィールドとの相互作用

WordPressでカスタム投稿タイプを登録する手順をご紹介する前に、カスタム投稿タイプのカスタム分類やカスタムフィールドなどの他のカスタムコンテンツとの相互作用を確認しましょう。

カスタム分類

WordPress では、「分類(タクソノミー)」は各投稿タイプの投稿をグループ化するための仕組みのことです。標準の投稿の場合、カテゴリとタグの2つの分類が使用されます。

カスタム投稿タイプを登録するときに、既存の分類法を割り当てることができます。分類を登録するときに、「カテゴリ」分類を追加できます。下記、カスタム投稿タイプの作成手順のついて説明するときに、これについても述べます。

または、カスタム投稿タイプに対してまったく新しい分類を作成することもできます。これもよくあるアプローチです。

たとえば、電子商取引サイトの「商品」投稿タイプを作成すると、「部門」の分類を作成して、商品を店舗の部門に割り当てることができます。

「イベント」投稿タイプを作成すると、「イベントタイプ」の分類を作成し、コンサート、詩の朗読、コメディナイトなどを特定できます。

作成する分類はユーザー次第であり、カスタム投稿タイプの投稿の整理や表示のし方により異なります。

カスタムフィールド

WordPressのもう一つのカスタムコンテンツは、投稿のメタデータとも呼ばれるカスタムフィールドです。カスタムフィールドは、投稿タイプがサポートしている限り、その投稿に追加できる追加のメタデータです。カスタム投稿タイプを登録するときに、次の行を使用してカスタムフィールドのサポートを含めることができます。

supports => array( 'custom-fields' );

これは配列として渡されるため、複数のオプションのサポートを追加できます。

たとえば、衣料品店の「商品」の投稿タイプにサイズや色など、カスタム投稿タイプにメタデータを追加する場合は、カスタムフィールドを使用します。

カスタムフィールドは、アーカイブページを出力しないため、カスタム分類とは異なります。

衣料品店の一例を次に示します。「女性」、「男性」など「部門」分類の各項目のアーカイブページがあります。それに、「サイズ」というカスタムフィールドもあるとします。顧客が期待するものではないため、サイズごとにアーカイブページを作成しません。

アーカイブページに表示する必要がありますか?このルールに従って、投稿にデータを追加するときにカスタム分類を使用した方がいいか、カスタムフィールドを使用した方がいいかを判断しましょう。

下記でカスタム投稿タイプとカスタム分類のアーカイブページを出力する方法も紹介します。

プラグインを使用してカスタム投稿タイプを追加する方法

それで、カスタム投稿タイプの概要を把握しましたので、ウェブサイトに追加したいですが、どうすればいいのでしょうか?

プラグインを使用する方法と、手動でコード化する方法の2つの方法があります。まず、プラグインから行きましょう。

カスタム投稿タイプを登録するために使用できるプラグインは2種類あります。1種類目は、プラグインの機能を追加するためのカスタム投稿タイプを登録します。2種類目は、独自の投稿タイプを作成するためのインターフェースを提供します。

前者には、電子商取引プラグイン、イベントプラグインなど、さまざまなプラグインが含まれています。まず、最も人気のあるWordPressプラグインの一つのWooCommerceから始めましょう。

WooCommerceを使用してカスタム投稿タイプを登録する方法

WooCommerceは、機能できるためにカスタム投稿タイプを登録するプラグインの一例です。この場合は、「商品」投稿タイプです。

WooCommerceにリストされている商品
WooCommerceにリストされている商品

WooCommerceはまた、商品カテゴリや商品タグなど、ストアを整理するためのカスタム分類とカスタムフィールドも登録します。これらは、ブログの投稿に使用するカテゴリやタグとは異なります。

Events Calendarプラグインを使用してカスタム投稿タイプを登録する方法

Events Calendarプラグインもカスタム投稿タイプを使用するプラグインです。この場合は、「イベント」投稿タイプです。

Events Calendarプラグインにより作成されたイベント
Events Calendarプラグインにより作成されたイベント

プラグインは、イベント特有の「イベントカテゴリ」分類を追加します。通常のタグもイベントに適用されるため、ブログの投稿に使用するタグと同じタグを使用できます。

WP Google Mapsを使用してカスタム投稿タイプを登録する方法

WP Go Maps(旧WP Google Maps)は、WooCommerceやThe Events Calendarのように、マップ用のカスタム投稿タイプを登録することができる地図表示プラグインです。

WP Google Mapsプラグインにより作成された地図
WP Google Mapsプラグインにより作成された地図

「地図」投稿タイプは、すべての地図のアーカイブページを表示せずに作成した地図のウェブサイトの投稿や固定ページに埋め込まれるショートコードを提供しているため、以前のプラグインの商品やイベント投稿タイプとは異なります。ただし、他の投稿タイプとは少し異なっても、同じ投稿タイプに違いありません。

Custom Post Type UIプラグインの使い方

WooCommerceなどのプラグインが提供する幅広い機能の一部ではなく、独自のカスタム投稿タイプを登録する場合は、カスタム投稿タイプを簡単に登録できるように設計されたインターフェースを提供するプラグインを使用できます。

そのようなプラグインの1つは、Custom Post Type Ui プラグインです。

Custom Post Type UIプラグイン
Custom Post Type UIプラグイン

このプラグインを使用すると、コードを書かずに、管理画面を使用して独自のカスタム投稿タイプを登録できます。

register_post_type()関数を使用するときに追加する投稿タイプを登録するための要素を追加できる画面を多数提供します。プラグインを使用して新しい投稿タイプを追加するには、「CPT IU」→ 「Add/Edit Post Types」(投稿タイプの追加・編集)にアクセスします。

Custom Post Type UIプラグインで投稿タイプを追加する
Custom Post Type UIプラグインで投稿タイプを追加する

ここで、新しい投稿タイプを追加したり、既存のカスタム投稿タイプを編集したりできます。

投稿タイプの設定を調整するか、デフォルト設定のままにすることができます。投稿タイプのすべての設定やオプションの詳細についてはWordPress Codexをご参照ください。

Custom Post Type UIプラグインの設定
Custom Post Type UIプラグインの設定

プラグインを使用してカスタム分類を登録し、それを新しい投稿タイプまたは既存の投稿タイプに割り当てることもできます。また、プラグインを使用して投稿タイプを登録する際に、既存の分類のいずれかも割り当てることができます。

Podsプラグインを使用してカスタム投稿タイプを登録する方法

Podsプラグインも、コードを書かずにカスタム投稿タイプを登録できるように設計されたインターフェイスを提供するプラグインです。

Podsを使用すると、既存の投稿タイプを拡張することさえできます。つまり、既存の投稿タイプまたは分類に追加のフィールドを追加したり、設定を編集したりできます。

Podsプラグインで投稿タイプを追加する
Podsプラグインで投稿タイプを追加する

Podsプラグインは、すべてのカスタマイズを保存するために投稿タイプ(「pod」)を使用します。また、Custom Post Type UIプラグインと同様に独自の投稿タイプも登録できますが、インターフェースは手順を一つずつ説明するように設計されています。つまり、プラグインのおかげでプロセスがしやすくなりますが、投稿タイプを自分でコード化した場合よりも、ウェブサイト(とデータベースへのデータ)に多くのコードが追加されます。

投稿タイプを登録するプロセスを管理するプラグインをインストールしたくない方は、自分でもコード化できます。

WordPressで独自のカスタム投稿タイプを登録する方法

コードの作成に慣れている方は、register_post_type()関数を利用してカスタム投稿タイプを登録できます。最も効率的な方法です。

ベストプラクティスは、テーマではなくプラグインにカスタム投稿タイプのコードを配置することです。なぜかというと、将来テーマを変更しても、投稿タイプとその投稿タイプで作成したすべての投稿を失わないためです。また、将来テーマを更新しても、投稿タイプが失われません。

さて、WordPressで独自のカスタム投稿タイプを登録する手順に進めましょう。

プラグインを作成する

最初のステップは、プラグインを作成することです。開発サイトまたはステージングサイト(本番サイトはまだです)のwp-content/pluginsフォルダーに、プラグイン用のフォルダーを作成します。そのフォルダーの中に、PHPファイルを追加します。私はkinsta-register-posttype.phpという名前を付けました。

アドバイス:私は、プラグインファイルをwp-content/pluginsフォルダーに直接に追加するのではなく、フォルダーを作成してその中にプラグインを作成するのが好きです。そうすると、インクルードファイル、スクリプト、スタイルなど、プラグインにさらなるファイルを追加する必要がある場合、専用のフォルダが既に準備されています。

次に、新しいphpファイルに、プラグインの開始コメントアウトされたテキストを追加します。

<?php
/*
Plugin Name: Register Custom Post Types
Plugin URI: http://rachelmccollin.com
Description: Plugin to register the book post type
Version: 1.0
Author: Rachel McCollin
Author URI:http://rachelmccollin.com
Textdomain: kinsta
License: GPLv2
*/

これは、WordPress(およびユーザー)にプラグインに関する重要な情報を伝えます。

  • 名前
  • 詳細情報を入手できる場所
  • 機能
  • バージョン番号
  • 開発者と開発者について詳細情報を入手できる場所
  • 国際化のためのテキストドメイン
  • ライセンス。必ずGPLにしましょう

これでプラグインができた為、必要に応じて管理画面でプラグインを有効化できます。有効にしても、まだ何も機能しません。

投稿タイプの機能を設定する

次に、投稿タイプを登録する関数の作成に入りましょう。この例では、書評サイトの例にしましたので、「book」という投稿タイプを作成します。カスタム投稿タイプの用途により使用する名前はもちろん完全に異なることがあります。

コメントアウトされたテキストの下に、次を追加します。

function kinsta_register_post_type() {

}
add_action( 'init', 'kinsta_register_post_type' );

この関数には、カスタム投稿タイプのすべてのコードが含まれます。名前を変更して、kinsta_の代わりに独自のプレフィックスを追加することもできます。テーマまたはプラグインにより提供される関数の名前と衝突しないように、すべての関数にプレフィックスを使用することをお勧めします。

コードの残りは、その関数の中括弧内に追加されます。

カスタム投稿タイプのラベルの定義

次に、カスタム投稿タイプのラベルを定義します。中括弧の中に次を追加します。

$labels = array(
 'name' => __( ‘Books’, ‘kinsta’ ),
 'singular_name' => __( 'Book', ‘kinsta’ ),
 'add_new' => __( 'New Book', ‘kinsta’ ),
 'add_new_item' => __( 'Add New Book', ‘kinsta’ ),
 'edit_item' => __( 'Edit Book', ‘kinsta’ ),
 'new_item' => __( 'New Book', ‘kinsta’ ),
 'view_item' => __( 'View Books', ‘kinsta’ ),
 'search_items' => __( 'Search Books', ‘kinsta’ ),
 'not_found' =>  __( 'No Books Found', ‘kinsta’ ),
 'not_found_in_trash' => __( 'No Books found in Trash', ‘kinsta’ ),
);

カスタム投稿タイプが「book」ではない場合は、調整する必要があります。使用できるラベルは他にもありますが、私は通常の場合に上記のラベルで十分です。

また、英語以外の言語に翻訳されるため私は独自のラベルで国際化を使用していますので、ご注意ください。

カスタム投稿タイプの引数の定義

次のステップは引数のです。引数の1つは、既に追加したラベルの配列になります。

中括弧の中のラベルの下に次を追加します。

$args = array(
 'labels' => $labels,
 'has_archive' => true,
 'public' => true,
 'hierarchical' => false,
 'supports' => array(
  'title',
  'editor',
  'excerpt',
  'custom-fields',
  'thumbnail',
  'page-attributes'
 ),
 'taxonomies' => 'category',
 'rewrite'   => array( 'slug' => 'book' ),
 ‘show_in_rest’ => true
);

それでは、上記の機能も確認しましょう。

  • labels引数は、すでに定義したラベルの配列です。
  • 'has_archive' => trueは、カスタム投稿タイプの投稿タイプアーカイブを有効にします。これはデフォルトでfalseになっているため、私はそれを上書きして、投稿タイプのアーカイブを使用するオプションを自分で設定します。(投稿タイプのアーカイブの使用については、後ほど説明します)。
  • 'public' => trueは投稿タイプを検索結果やカスタムクエリに含められるようにします。繰り返しますが、デフォルトはfalseであり、私がよく上書きします。
  • hierarchicalの値は、カスタム投稿タイプの用途により異なります。これをtrueに設定すると、投稿タイプは固定ページのように動作し、投稿タイプのどの投稿も階層化されているものにして親投稿や子投稿を作成することができるようになります。falseに設定すると、階層のない投稿のように動作します。
  • supports配列は、この投稿タイプがサポートできる投稿タイプの機能の数を定義します。私はアイキャッチ画像やカスタムフィールドなどの機能が有効になっていることを常に確認します。
  • taxonomies引数は、この投稿タイプに適用される既存の分類を定義します。この例では、「カテゴリ」分類を使用しています。カスタム分類を使用したいがまだ登録していない方は、この行をスキップして、その分類を投稿タイプに登録してください。カスタム分類を既に登録している場合は、この行を使用して投稿に追加できます。
  • 私は、分類にスラグに使用する名前とは異なる名前を付けたい為、rewrite引数を使用しています。これについては、後ほど詳しく説明します。
  • ‘show_in_rest’ => truetrueは、投稿タイプがREST APIとGutenbergインターフェースで利用可能になっていることを確保します。デフォルトはfalseですが、これは意味がないと思います。すべての投稿タイプで同じエディタインターフェイスを使用したいことは当たり前のことでしょう!

それでは、これで引数の設定ができました。ただし、投稿タイプはまだ登録されていません。今から登録しましょう。

register_post_type()関数の追加

最後のステップは、上記すべてをregister_post_type()関数にまとめることです。

中括弧の中の引数の下に次を追加します。

register_post_type( ‘kinsta_book', $args );

これにより、上記に定義した引数を持つ「kinsta_book」投稿タイプが登録されます。

これで、以前に「rewrite」引数を使用した理由を理解しやすくなったのでしょう。サードパーティのプラグインにより提供される関数の名前と衝突しないように投稿タイプの名前にプレフィックスを追加しますが、プレフィックスを公開したくありません。

デフォルトでは、WordPressは投稿タイプの一例を表示するときに、URLで投稿タイプの名前を使用します。したがって、「My Wonderful Book」という本には、mysite.com/kinsta_book/my-wonderful-bookというURLが付けられます。ただしそうはしたくない為、rewrite引数を使用してURLをmysite.com/book/my-wonderful-bookに変更します。この方がいいですね。

ファイルを保存し、WordPress管理画面でプラグインを有効にします。そうすると、管理メニューに新しい投稿タイプが表示されます。

管理画面の「books」投稿タイプ
管理画面の「books」投稿タイプ

これで、投稿タイプが登録されましたので、使用できるようになりました。少し時間をかけて投稿を追加してください。(ブログ投稿ではなく、カスタム投稿タイプの投稿です。WordPressは理解しにくいことがあります!)できたら、ウェブサイトのフロントエンドでカスタム投稿タイプの投稿を表示する方法をご説明します。

ウェブサイトでカスタム投稿タイプを表示する方法

ウェブサイトに追加するほとんどのカスタム投稿タイプは投稿のように機能します。つまり、アーカイブページに表示されるように設計されているものです。カスタムの分類を使用してる人もいれば、私と同様に「カテゴリ」分類を追加している人もいます。

あるいは、特定の機能を追加するためにカスタム投稿タイプを追加するWooCommerceなどのプラグインを使用した場合、そのプラグインはカスタム投稿タイプを出力するための特定のページ(「Shop2ページ」など)を追加する場合があります。

カスタム投稿タイプを表示する4つのオプションは次のとおりです。

  • 個々の投稿(上記の例での本)を表示する
  • すべての書籍がリストされた投稿タイプの完全なアーカイブを表示する/li>
  • カスタム投稿タイプに登録した分類を使用して、カスタム分類アーカイブを表示する
  • カスタム投稿タイプ(例:books)の投稿を、「カテゴリ」などの既存の分類のアーカイブやメインのブログページに加える

上記を順番に確認していきましょう。

注:本プロセス中に、カスタム投稿タイプのアーカイブや個々の投稿にアクセスできない場合は、それはWordPressがまだパーマリンクを作成していないためです。これを処理するには、「設定」→「パーマリンク」にアクセスし、「変更を保存」ボタンをクリックします。これにより、新しい投稿タイプを確認してそのURLを作成するようにWordPressに指示します。

投稿タイプアーカイブの表示

最初のオプションは、カスタム投稿タイプのアーカイブのすべての投稿のためのアーカイブページを作成することです。

投稿タイプを登録したときにhas_archiveをtrueとして定義した場合、WordPressは投稿タイプのアーカイブページを自動的に生成します。これをカスタマイザーを使用してナビゲーションメニューに追加できます。

投稿タイプアーカイブをメニューに追加する

カスタマイザーを開き、「メニュー」オプションを選択します。 メインメニューを選択し、「アイテムの追加」ボタンをクリックして、メニューに追加のアイテムを追加します。

WordPressカスタマイザーでメニュー項目を追加する
WordPressカスタマイザーでメニュー項目を追加する

オプションから投稿タイプを選択し、名前の右にある下向き矢印をクリックします。これにより、今まで追加したすべての投稿のリストと、ともう一つのオプション(今回の例ではAll Books)が表示されます。それをクリックすると、メニューに追加されます。

メニューでそのアイテムをクリックすると、ラベルが編集できます。私は「All Books」ではなく、単に「Books」という呼び方が好きです。

メニュー項目「Books」の編集
メニュー項目「Books」の編集

なお、これはカスタマイザーを使用してのみ行うことができることにご注意ください。メニュー画面ではできません。そのため、カスタム投稿タイプのアーカイブをメニューに追加するときに必ずカスタマイザーを使用してください。

投稿タイプアーカイブのカスタマイズ

WordPressではテンプレート階層に基づいて、テーマのカスタム投稿タイプアーカイブの表示に使用するテンプレートファイルが特定されます。

WordPressのテンプレート階層
WordPressのテンプレート階層

テーマにarchive.phpファイルがある場合はarchive.phpファイルが使用されるが、ない場合はindex.phpが使用されます。

カスタム投稿タイプアーカイブの出力方法を編集する場合は、カスタム投稿タイプアーカイブのテンプレートファイルを作成します。

特定のカスタム投稿タイプについては、archive-$posttype.phpというテンプレートファイルを作成する必要があります。$posttypeはあなたの投稿タイプの名前です。したがって、booksの投稿タイプには、archive-kinsta_book.phpというファイルを作成します。

このファイルを作成する最もしやすい方法は、テーマのarchive.phpファイルのコピーを作成することです。名前を変更してから投稿タイプのアーカイブを希望どおりに表示するように編集します。

単独の投稿を表示する

カスタム投稿タイプを使用して作成された単独の投稿も、テンプレート階層の最初の関連テンプレートファイルを使用して表示されます。

単独の投稿はアーカイブよりも細かく設定できます。投稿タイプのテンプレートファイル(single-$posttype.php)を作成できるだけでなく、スラグを使ってその投稿タイプの特定の投稿のファイルを作成することもできます(single-$postype-slug.php)。

例えば、書評サイトに大いなる遺産を追加した場合、すべての書評用にsingle-kinsta_book.phpというファイルを作成することも、single-kinsta_book-great-expectations.phpという大いなる遺産専用のターゲットファイルを作成することもできます。これらのファイルのどちらも作成しなかった場合、WordPressはデフォルトでsingle.phpまたは(single.phpは存在しない場合)singular.phpやindex.phpを使用します。

カスタム投稿タイプのメインブログページへの追加

デフォルトでは、メインブログページに表示される投稿タイプは「投稿」のみです。しかし、ブログの投稿と混同して、カスタム投稿タイプも表示したい場合があるかと思います。

これを行うには、WordPressのpre_get_postsフックを使用します。

投稿タイプを登録したプラグインに次を追加します。

<?php
function kinsta_books_on_blog_page() {
 
 if ( $query->is_home() && $query->is_main_query() ) {
  $query->set( ‘post_type', array( ‘post’, ‘kinsta_book’ );
 }

}
add_action( 'pre_get_posts', 'kinsta_books_on_blog_page' ); ?>

このフックは、現在ホームページにあること(ウェブサイトのフロントページはブログでなくてもホームページはブログである)と、(これをウィジェットなどで実行したくないため)メインクエリが実行されていることを確認します。そうであれば、投稿とbooksの両方をクエリに追加します。

配列に「投稿」という投稿タイプと新しい投稿タイプの両方を含める必要があることにご注意ください。

まとめ

カスタム投稿タイプ機能は、WordPressが単なるブログプラットフォームではなくコンテンツ管理システムである理由です。オンラインストア、リファレンスハブ、メディアサイトなどとして機能する、複雑で特注のウェブサイトが作成できます。

WordPressウェブサイトにカスタム投稿タイプを追加できる方法は3つあります。例えば、WooCommerceなどのプラグインの機能に関連するカスタム投稿タイプを登録するプラグインを使用できます。または、CPT UIやPodsなどのプラグインを使用して、独自のカスタム投稿タイプを追加できます。それに、コードを使用して、独自のプラグインを作成し、register_post_type()関数を使用することにより投稿タイプを登録できます。どちらの方法にしても、WordPressウェブサイトを最大限に生かすことができます。

Rachel McCollin

Rachel McCollin has been helping people build websites with WordPress since 2010. She's a huge fan of self-hosted WordPress and wants to help as many people as possible create an awesome website with it.