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

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

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

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

メタデータは名前と、そのの組み合わせからなっています。名前は、メタデータ要素の名称のことを指します。は、その要素に対応する情報を指します。

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

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

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

関数リファレンス

追加、更新、削除 カスタムメタデータの名前・値を取得 テンプレートタグ
add_post_meta()get_post_custom()the_meta()
update_post_meta() get_post_custom_values() get_post_meta()
delete_post_meta() get_post_custom_keys()

使い方

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

  1. 投稿を書いたあと、カスタムフィールドの欄までスクロールします。注: WordPress バージョン3.1 より、投稿・固定ページ編集管理画面の表示オプションではいくつかのものがデフォルトで非表示になっています。カスタムフィールドも、以前に使用されたことがない場合はデフォルトで非表示になっています。
  2. 新しいカスタムフィールドを作成するには名前 と書かれた下にある欄に書き込みます。まずはここに「今読んでいる本」というテキストを (引用符は無しで) 入力します。
  3. 新規作成した名前(「今読んでいる本」)に対応する値を追加します。今回の場合は、読んでいる本の題名になります。の欄に「星の王子さま」と書き込みます。ここでも引用符は不要です。
  4. ここまで終わったら、カスタムフィールドを追加ボタンをクリックしましょう。
カスタムフィールド

「今日の天気」を追加するには、同じ手順を繰り返します。「今日の天気」を名前に追加し、のテキストボックスに天気を入力してカスタムフィールドを追加をクリックします。最後に「保存」(または「公開」)ボタンをクリックして記事を保存します。

次に記事を投稿する際、別の本や天気をメタデータとして追加することができます。一度追加した名前カスタムフィールド欄にあるプルダウンメニューの項目として表示されます。「今読んでいる本」を選択肢、に読んでいる本を入力します。カスタムフィールドを追加をクリックし、手順を繰り返して「今日の天気」を追加します。

新しい「名前」を作成する必要があるのは一度だけです。その後は必要に応じて、記事ごとにその名前と値を割り当てることができます。名前には複数のを割り当てることもできます。これは、一度に複数の本を読む人にとって便利です。

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

カスタムフィールドを記事に追加したら、その情報をサイトで公開しましょう。 各記事のカスタムフィールドを表示するには、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 が必須で、$singleTRUE に設定されている場合、配列ではなく1つ目の結果のみを 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つの名前(キー)に対する値を文字列として出力します。

詳細情報およびリソース

カスタムフィールドを管理するプラグインをインストールすることもできます。

  • Meta Box plugin – カスタムメタボックスとカスタムフィールドを作成できるプラグイン。
  • Piklist – WordPress のあらゆる場所でカスタムメタボックスとフィールドを作成できるプラグイン。
  • Advanced Custom Fields – ユーザーフレンドリーなインターフェースを使用して複雑なフィールドとレイアウトを作成できるプラグイン。

原文

この記事は役に立ちましたか ? どうすればさらに改善できますか ?