- サイトデザイン工事中です。ご意見をお寄せください。
- 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細)
カスタムフィールドの使い方
目次 |
WordPress には、投稿者が投稿に「カスタムフィールド」を追加できる機能があります。この任意の情報は「メタデータ」と呼ばれており、たとえば以下のような情報を含めることができます。
- 現在のムード: 幸せいっぱい
- 今読んでいる本: 星の王子様
- BGM: Rock Around the Clock
- 今日の天気: 晴れ
さらに、ちょっとしたコードを付け加えるだけで、このメタデータに投稿の表示期限を付け加えたりすることも可能です。
メタデータは「名前」と、その「値」の組み合わせからなっています。「名前」は、メタデータ要素の名称のことを指します。「値」は、その要素に対応する情報を指します。一般的には、固定された「名前」に対し、記事によって異なる「値」を記入します。
また、ひとつの記事で、複数のメタデータの名前を使用することもできます。例えば今読んでいる本が2冊ある場合、「今読んでいる本」という名前を2度使い、それぞれに対し1冊の本の題名を記入すればよいのです。
カスタムフィールドを記入した場合、記事中に以下のように表示できます。
- 今読んでいる本: 星の王子様
- 今日の天気: 晴れ
関数リファレンス
|
|
|
使い方
上記の例に基づいて、実際にカスタムフィールドを使ってみましょう。ここでは、「今読んでいる本」と、「今日の天気」というカスタムフィールドの値を追加します。
- 管理画面内の記事投稿パネルで「カスタムフィールド」ボックスへ移動します。
- 新しいカスタムフィールドを作成するには、「名前」と書かれた下にある欄に書き込みます。まずはここに、「今読んでいる本」と書きましょう。
- 新規作成した名前に対応する値を追加します。今回の場合は、読んでいる本の題名になります。「値」と書かれた下にある欄に、「星の王子様」と書き込みます。
- ここまで終わったら、「カスタムフィールドを追加」ボタンをクリックしましょう。
さらに「今日の天気」を追加するには上記のプロセスを繰り返します。最後に「保存」(または「公開」)ボタンをクリックして記事を保存します。
次に記事を投稿する際、別の本や天気をメタデータとして追加することができます。一度追加した名前は、カスタムフィールド記入エリア内にあるプルダウンメニューの項目として簡単に選択することができるようになります。
カスタムフィールドを記事内に表示する
カスタムフィールドを記事に追加したら、その情報をサイトで公開しましょう。各記事にカスタムフィールドを表示させるには、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 検索 でさらに多くのプラグイン情報を見つけられるでしょう。
カスタムフィールドを使ったさらに高度なテクニック
以下はメタデータ/カスタムフィールドを利用したさらに高度なテクニックです。
カスタムフィールドを取得する
メタデータの値を取得するには、 get_post_meta() 関数を使います。
get_post_meta($post_id, $key, $single);
- $post_id は、メタデータの値を取得する記事のIDです。 $post->ID を使って記事のIDを取得してください。
- $key は取得する名前の文字列です。
- $single は true または 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 => [ ... ],
...
]
つまり、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); ?>
テンプレート関数
- the_meta(): 現在の記事のメタデータを順不同リストとして出力します。<ul> の CSS クラスは post-meta、<li> は post-meta-key となります。
開発者のみなさんが多くのメタデータの面白い使い方を考え出してくれると期待しています。the_meta() テンプレート関数は、単にひとつの基本的な例にすぎません。現時点では項目を追加・削除することしかできませんが、項目を編集できる機能は後ほど追加される予定です。
最新英語版: WordPress Codex » Using Custom Fields (最新版との差分)