2026年5月30日

2026年5月30日

Pods(カスタム投稿タイプ・カスタムフィールド)の使い方|作成から表示・WP-CLIまで

Pods(正式名称は「Pods – Custom Content Types and Fields」)は、WordPress にカスタム投稿タイプ、カスタムタクソノミー、カスタムフィールドを追加できる無料のプラグインです。投稿タイプの登録とフィールドの作成を1つのプラグインで行え、作ったデータを表示するためのテンプレート機能やブロックも備えています。

2026年10月時点の最新版は 3.3.9.2 で、WordPress 6.3 以上・PHP 7.2 以上が必要です(有効インストール数は10万以上)。この記事では、書籍を管理する「本」の投稿タイプに「ISBN」と「価格」のフィールドを付ける例で、作成から表示までを説明します。画面の確認には WordPress 7.1.4 と Pods 3.3.9.2 を使っています。Pods の管理画面は日本語に翻訳されていない部分があるため、英語のまま表示される項目は英語で書いています。

Podsでできること

Pods では、管理する入れ物を「Pod」と呼びます。新しく作れる Pod の種類(コンテンツタイプ)は次のとおりです。

種類 内容
カスタム投稿タイプ 投稿や固定ページと同じように、一覧・編集画面を持つ新しい投稿タイプ
カスタムタクソノミー カテゴリーやタグのような分類
カスタム設定ページ サイト全体で使う値(電話番号など)を保存する設定画面
拡張コンテンツタイプ(Advanced Content Type) WordPress の投稿とは別の独自テーブルに保存するデータ。「コンポーネント」で有効にすると使える

また、既存の投稿・固定ページ・カテゴリー・ユーザー・メディア・コメントにフィールドを追加する「拡張」もできます。

インストール

管理画面の「プラグイン」→「新規プラグインを追加」で「Pods」を検索し、「Pods – Custom Content Types and Fields」をインストールして有効化します。

WP-CLI を使う場合は次のとおりです。プラグインのスラッグは pods です。

wp plugin install pods --activate

有効化すると、管理画面のメニューに「Pods Admin」が追加されます。

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

  1. 「Pods Admin」→「新規追加」を開きます
  2. 「新しいコンテンツタイプを作成」を選びます
  3. 「コンテンツタイプ」で「カスタム投稿タイプ (投稿や固定ページと同等)」を選びます
  4. 「単数形のラベル」に 本、「複数形のラベル」に 本 と入力します
  5. サイトの訪問者にも表示する場合は、「Content Privacy」で「Yes, make this content available for Dynamic Features in Pods and WordPress」を選びます
  6. 「Advanced」を開き、「Podの名称」(投稿タイプの名前。英小文字とアンダースコア)を book にします
  7. 「次のステップ」をクリックすると、Pod が作られ、編集画面が開きます

5の「Content Privacy」は初期状態では選ばれていません。このままだと投稿タイプが公開扱いにならず、個別ページや後述のショートコードの内容がサイトの訪問者に表示されません(管理者には「Pods Access Rights: Admin-only Notice」というお知らせが表示されます)。後から変える場合は、Pod の編集画面の「高度なオプション」(Advanced Options)タブにある「Publicly Queryable」をオンにして保存します。

「Podの名称」は投稿タイプの名前として URL やデータベースに使われるため、記事を入れた後に変えないようにします。

フィールドを追加する

Pod の編集画面で、フィールドを追加します。

  1. 「Add Field」をクリックします
  2. ラベル(画面に出る名前)に ISBN、名前(プログラムで使う名前)に isbn を入力します
  3. 「フィールドタイプ」で「プレーンテキスト」(Plain Text)を選び、保存します
  4. 同じように、ラベル 価格、名前 price、フィールドタイプ「Plain Number」(日本語の画面では「整数」と表示)のフィールドを追加します
  5. 「Save Pod」をクリックして Pod を保存します

主なフィールドタイプは次のとおりです。

フィールドタイプ 用途の例
テキスト系(Plain Text、Website、Phone、E-mail、Password) 1行の文字、URL、電話番号、メールアドレス
段落系(Plain Paragraph Text、WYSIWYG (Visual Editor)、Code (Syntax Highlighting)) 複数行の文章、書式付きの文章
日時(Date / Time、Date、Time) イベントの日付など
数値(Plain Number、Currency) 数量、金額
ファイル(File / Image / Video)、oEmbed 画像や PDF、YouTube などの埋め込み
関係(Relationship) ほかの投稿・ユーザー・タクソノミーなどとの関連付け
Yes / No、Color Picker オン・オフの値、色

保存すると、メニューに「本」が追加され、投稿と同じように新規追加・編集ができます。編集画面の下に、追加した ISBN と価格の入力欄が表示されます。

保存方式(メタベースとテーブルベース)

カスタム投稿タイプの Pod は、初期設定の「メタベース (WPデフォルト)」では、フィールドの値を WordPress 標準のカスタムフィールド(wp_postmeta テーブル)に保存します。そのため、Pods の関数を使わなくても get_post_meta() で値を読めます。

<?php
// メタベースの Pod なら、WordPress 標準の関数でも値を読める
$isbn = get_post_meta( get_the_ID(), 'isbn', true );

「テーブルベース」を選ぶと、フィールドの値を Pod ごとの専用テーブルに保存します。拡張コンテンツタイプとテーブルベースの保存は、初期状態では無効になっていて、「Pods Admin」→「コンポーネント」で「Advanced Content Types」「Table Storage」を有効にすると使えます。データの件数が多く、フィールドで絞り込む処理が重い場合などに検討します。迷ったら、ほかのプラグインやテーマと互換性のあるメタベースを使います。

テンプレート(PHP)で表示する

個別ページにフィールドを出す

クラシックテーマでは、投稿タイプ book の個別ページに single-book.php が使われます。ループの中で pods() 関数を使い、フィールドの値を出します。

<?php
// single-book.php のループの中で、表示中の本のフィールドを出す
$book = pods( 'book', get_the_ID() );
?>
<p>ISBN: <?php echo esc_html( $book->field( 'isbn' ) ); ?></p>
<p>価格: <?php echo esc_html( $book->display( 'price' ) ); ?>円</p>
  • pods( 'Pod の名前', 投稿ID ) で、1件分のデータを取得します
  • field() は保存されている値をそのまま返し、display() はフィールドの設定に合わせて整えた値を返します。この例では、価格 3300 が field() では 3300、display() では 3,300 になります
  • 出力するときは esc_html() などでエスケープします

条件に合う一覧を出す

pods() に条件を渡すと、複数の項目を取得できます。fetch() で1件ずつ順に取り出します。

<?php
// 価格が2,500円以上の本を、新しい順に10件表示する
$books = pods(
	'book',
	array(
		'limit'   => 10,
		'orderby' => 't.post_date DESC',
		'where'   => 'price.meta_value + 0 >= 2500',
	)
);

if ( 0 < $books->total() ) {
	echo '<ul class="book-list">';
	while ( $books->fetch() ) {
		printf(
			'<li><a href="%1$s">%2$s</a>(ISBN: %3$s、%4$s円)</li>',
			esc_url( get_permalink( $books->id() ) ),
			esc_html( $books->field( 'post_title' ) ),
			esc_html( $books->field( 'isbn' ) ),
			esc_html( $books->display( 'price' ) )
		);
	}
	echo '</ul>';
}
  • where と orderby は SQL の一部として使われます。t. は投稿のテーブル、price.meta_value はメタベースで保存した price フィールドの値です(メタの値は文字列なので、数値として比べるために + 0 を付けています)
  • where に、フォームの入力値などを確認せずに入れないでください。SQL インジェクションの原因になります
  • total() は今回取り出した件数、id() は現在の項目の ID を返します

この2つのコードは、Pods 3.3.9.2 で実際に出力を確認しています。

Pod Templatesとショートコードで表示する

PHP を書かずに表示したい場合は、Pods の「テンプレート」コンポーネント(初期状態で有効)を使います。

  1. 「Pods Admin」→「Pod Templates」で新しいテンプレートを作り、名前を book-list にします
  2. 本文に、{@フィールド名} の形(マジックタグ)で1件分の表示内容を書きます。例は次のとおりです
<li>{@post_title}(ISBN: {@isbn}、{@price}円)</li>

テンプレートを公開したら、表示したいページにショートコードを置きます。ブロックエディターでは「ショートコード」ブロックに次のように書きます。

[pods name="book" template="book-list" limit="10"]

マジックタグの {@price} は、display() と同じく整えた値(例: 3,300)を出力します。なお、ショートコードの orderby に SQL の式を書くと、セキュリティ上の理由で「ORDER BY contains SQL that is not allowed」というエラーになることがあります。並び順を細かく指定したい場合は、前の節の PHP を使います。

ブロックエディターやサイトエディターでは、Pods が追加するブロック(「Pods Item List」「Pods Single Item」「Pods Field Value」など)を使って、同じように一覧や1件分のデータを表示することもできます。

WP-CLIでPodとフィールドを作る

Pods には WP-CLI のコマンド(wp pods)があり、画面を使わずに Pod やフィールドを作れます。Pods 3.3.9.2 で次の手順を確認しました。

# カスタム投稿タイプの Pod を作る
wp pods pod add --type=post_type --name=book --label=本 --label_singular=本

# フィールドをまとめるグループを作る(出力される "id" の値を控える)
wp pods group add --pod=book --name=book_info --label=本の情報

# グループに ISBN(テキスト)と価格(数値)のフィールドを追加する(--group_id は上の id。この例では 5)
wp pods field add --pod=book --group_id=5 --name=isbn --label=ISBN --type=text
wp pods field add --pod=book --group_id=5 --name=price --label=価格 --type=number
  • 試した環境では、wp pods field add でグループを名前(--group=book_info)で指定するとエラーになったため、ID(--group_id)で指定しています
  • コマンドで作った Pod も、画面で作った場合と同じく公開扱いになっていません。訪問者に表示する場合は、Pod の編集画面の「高度なオプション」タブで「Publicly Queryable」をオンにします(コマンドで変える場合は wp pods pod update-by-slug book --args='{"publicly_queryable":"1"}')
  • 使えるオプションは wp help pods pod add や wp help pods field add で確認できます。旧版の記事にあった wp pod create や wp pod update というコマンドは存在しません

注意点

  • Pod の名前やフィールドの名前を後から変えない:保存済みのデータは古い名前で保存されているため、表示されなくなることがあります
  • ほかのプラグインと同じ投稿タイプ名を使わない:Custom Post Type UI や ACF などで同じ名前の投稿タイプを登録すると、設定がぶつかります
  • 個別ページが 404 になる:投稿タイプを作った直後に 404 になる場合は、「設定」→「パーマリンク」を開いて「変更を保存」をクリックし、パーマリンクの設定を更新します
  • バックアップを取ってから変更する:Pod の削除や保存方式の変更は、保存済みのデータに影響します。作業の前にデータベースをバックアップします

まとめ

  • Pods は、カスタム投稿タイプ・タクソノミー・フィールドを1つのプラグインで作れる
  • 「Pods Admin」→「新規追加」で Pod を作り、編集画面の「Add Field」でフィールドを追加する
  • 訪問者に表示する場合は「Content Privacy」で公開を選ぶ
  • 表示は pods() の field()・display()・fetch()、または Pod Templates とショートコード、Pods のブロックで行う
  • WP-CLI の wp pods pod add・wp pods group add・wp pods field add でも作成できる

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲