• 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細

このWikiはいつでも誰でも編集できます

カスタムフィールドの使い方

提供: WordPress Codex 日本語版
移動先: 案内検索

WordPress には、投稿者が投稿に「カスタムフィールド」を追加できる機能があります。この任意の情報は「メタデータ」と呼ばれており、たとえば以下のような情報を含めることができます。

  • 現在のムード: 幸せいっぱい
  • 今読んでいる本: 星の王子様
  • BGM: Rock Around the Clock
  • 今日の天気: 晴れ

さらに、ちょっとしたコードを付け加えるだけで、このメタデータに投稿の表示期限を付け加えたりすることも可能です。

メタデータは「名前」と、その「値」の組み合わせからなっています。「名前」は、メタデータ要素の名称のことを指します。「値」は、その要素に対応する情報を指します。一般的には、固定された「名前」に対し、記事によって異なる「値」を記入します。

また、ひとつの記事で、複数のメタデータの名前を使用することもできます。例えば今読んでいる本が2冊ある場合、「今読んでいる本」という名前を2度使い、それぞれに対し1冊の本の題名を記入すればよいのです。

カスタムフィールドを記入した場合、記事中に以下のように表示できます。

  • 今読んでいる本: 星の王子様
  • 今日の天気: 晴れ

関数リファレンス

追加、更新、削除
カスタムメタデータの名前・値を取得
テンプレートタグ

使い方

カスタムフィールド記入ボックス

上記の例に基づいて、実際にカスタムフィールドを使ってみましょう。ここでは、「今読んでいる本」と、「今日の天気」というカスタムフィールドの値を追加します。

  1. 管理画面内の記事投稿で「カスタムフィールド」ボックスへ移動します。
    注: WordPress バージョン 3.1 より、投稿・固定ページでの管理画面表示オプションの一部がデフォルトでは非表示になっています。カスタムフィールドも、以前使ったことがない場合はデフォルトで非表示になります。
  2. 新しいカスタムフィールドを作成するには、「名前」と書かれた下にある欄に書き込みます。まずはここに、「今読んでいる本」と書きましょう。
  3. 新規作成した名前に対応する値を追加します。今回の場合は、読んでいる本の題名になります。「値」と書かれた下にある欄に、「星の王子様」と書き込みます。
  4. ここまで終わったら、「カスタムフィールドを追加」ボタンをクリックしましょう。
  5. 「現在のムード」を追加するには、同じ手順を繰り返します。「現在のムード」を「名前」として追加し、ムードの説明を「値」というテキストボックスに記入して「カスタムフィールドを追加」ボタンをクリックしてください。

さらに「今日の天気」を追加するには上記のプロセスを繰り返します。最後に「保存」(または「公開」)ボタンをクリックして記事を保存します。

次に記事を投稿する際、別の本や天気をメタデータとして追加することができます。一度追加した名前は、カスタムフィールド記入エリア内にあるプルダウンメニューの項目として簡単に選択することができるようになります。

カスタムフィールドを記事内に表示する

カスタムフィールドを記事に追加したら、その情報をサイトで公開しましょう。各記事にカスタムフィールドを表示させるには、the_meta() テンプレートタグを使います。このタグは WordPress ループ内に置く必要があります。the_meta() テンプレートタグを記事の最初や最後の記事メタデータセクションなどに含めるという方法が良く使われます。以下が、一般的なタグの記入例です。

<?php the_meta(); ?>

上記の例の場合、ソースコードではこのように表示されているはずです。

<ul class='post-meta'>
<li><span class='post-meta-key'>今読んでいる本: </span> 星の王子様</li>
<li><span class='post-meta-key'>今日の天気:</span> 晴れ</li>
</ul>

テンプレートタグは、メタデータを順不同リスト(<ul> )形式で出力し、そのリストに post-meta というクラスを自動的に割り当ててくれます。さらに名前は post-meta-key というクラスの <span> 要素に囲まれるので、スタイルシートを使って見た目を変更することができます。

カスタマイズするには、以下の宣言を使用中のテーマのスタイルシート(style.css)に追加します。

.post-meta {font-variant: small-caps; color: maroon; }
.post-meta-key {color: green; font-weight: bold; font-size: 110%; }

サイト上では、以下のように表示されます。

  • 今読んでいる本: 星の王子様
  • 今日の天気: 晴れ

さらに、公式プラグインディレクトリにはメタデータ表示に便利な機能を追加してくれるプラグインがいろいろとあります。カスタムフィールドプラグインの Google 検索 でさらに多くのプラグイン情報を見つけられるでしょう。

カスタム投稿タイプ内でカスタムフィールドの対応を登録するには、以下のように 'custom-fields' を使って 'supports' $args を追加してください。

'supports' => array('title','editor','thumbnail','custom-fields')

カスタムフィールドを使ったさらに高度なテクニック

以下はメタデータ/カスタムフィールドを利用したさらに高度なテクニックです。

カスタムフィールドを取得する

メタデータの値を取得するには、 get_post_meta() 関数を使います。

 get_post_meta($post_id, $key, $single);
  • $post_id は、メタデータの値を取得する記事のIDです。 $post->ID を使って記事のIDを取得してください。
  • $key は取得する名前の文字列です。
  • $singletrue または false としてください。true に設定されている場合、結果を1つの文字列として返します。false の場合、カスタムフィールドの配列を返します。

詳しいやり方

PostMeta で取得された情報は新しいテーブル内に格納されます($wpdb->postmeta)。このテーブルには4つのフィールドがあります。

'meta_id' - 各メタデータ項目の固有 ID
'post_id' - 取得したメタデータが属する記事の ID
'meta_key' - メタデータの名前
'meta_value' - メタデータの名前に対応する値

このテーブル内の値は、wp-blog-header.php 内の $posts 配列が取得された直後、$post_meta_cache と呼ばれる多次元配列に格納されます。この変数は、要求されたページ内に表示される記事に属する値のみが含まれています。配列の構造はこのようになっています。

[
	postid1 => [
		key1 => [ val1, val2, ... ],
		key2 => [ val1, val2, ... ],
		...
	],
	postid2 => [
		key1 => [ val1, val2, ... ],
		key2 => [ val1, val2, ... ],
		...
	],
	...
]

つまり、ID 256の記事につけられた「今読んでいる本」のデータを取得したい場合、以下のような PHP コードを使えばいいのです。

 // 今読んでいる本の配列値を取得
 $readinglist = $post_meta_cache[256]['今読んでいる本'];
注: $readinglist は1つの値ではなく配列となることに注意しましょう。
WordPress 2.1 以降では、$post_meta_cache にはデータが含まれません。メタデータの値は、以下の方法で取得してください。

PostMeta 関数

内部関数

これらの関数は、WordPress ループ内で使うためのものです。すべての関数は配列を返します。

  • get_post_custom(): 現在の記事に関連するメタデータの名前および値を取得。
  • get_post_custom_keys(): 現在の記事につけられたすべてのメタデータの名前をリストとして取得。
  • get_post_custom_values($key): 現在の記事中にあるメタデータの値を取得。
  • get_post_meta($post_id, $key, $single = false): WP 1.5以降で、キャッシュ関連の問題を起こすことなくメタデータを返します。この関数には $post_id$key が必須で、$singleが TRUE に設定されている場合、配列ではなく、一つ目の結果のみをPHPで使用できるように返します。
// 以下は、メタデータの値を出力します(echo があることに注目してください)
<?php $key="メタデータの名前"; echo get_post_meta($post->ID, $key, true); ?>

テンプレート関数

WordPress テンプレートファイルでは投稿メタ関数を利用できます。例えば以下の通りです。

the_meta(): 現在の記事のメタデータを順不同リストとして出力します。<ul> の CSS クラスは post-meta、<li> は post-meta-key となります。
<?php echo get_post_meta($post->ID, 'key', true); ?>
テンプレートファイル内で使うと、1つの名前(キー)に対する値を文字列として出力します。


詳細情報およびリソース


最新英語版: WordPress Codex » Using Custom Fields最新版との差分