Using Custom Fields << WordPress Codexの和訳かつ要約です。
WordPressには投稿者が投稿にカスタムフィールドを追加する機能があります。
この自由で不定な情報はメタデータとして知られています。メタデータは以下のような情報を含む事が可能です。
- 気分:幸せ
- 読んでいる本:シンデレラ
- 聴いている曲:Rock Around the Clock
- 気候:蒸し暑い
コードを追加すれば、投稿の公開期限を含めるなどの、より複雑な処理も可能です。
メタデータはkey/valueの組み合わせで操作されます。keyはメタデータ要素名です。valueは投稿に関連付けられた値です。
keyは投稿毎に1つ以上使用されます。例えば、あなたが2つの本を読んでいるのであれば、"reading"keyを2回使います。
投稿上では以下のように表示されます。
- 読んでいる本:Calvin and Hobbis
- 気分:Jolly and Happy
使い方
実際にやってみましょう。これから2つのカスタムフィールドを追加します。ひとつは「読んでいる本」、ひとつは「気分」です。
- 投稿を書いた後に、ページ内のカスタムフィールドのエリアに移動します。
- keyに"Currently Reading"と入力します。
- valueに本の題名を入れます。
- "Add Custom Field"をクリックします。
同じように「気分」を"Today's Mood"というkeyで追加したら、投稿を保存します。
次の投稿から、新しい本、気分をメタデータに追加できます。keyのプルダウンにkeyが追加されてます。
カスタムフィールドの表示
the_meta()テンプレートタグを使えば、それぞれの投稿にカスタムフィールド値をリスト形式で表示できます。このタグはThe Loopの中に置かれなければなりません。
カスタムフィールドのより進んだ使い方
カスタムフィールドの取得
get_post_meta()関数を使って、メタの値を取得できます。
get_post_meta($post_id, $key, $single);
- $post_idは取得したいメタを持つ投稿のIDです。$post->IDを使えば投稿のIDを取得できます。
- $keyは取得したいメタのkeyの文字列です。
- $singleにはtrueもしくはfalseを入れます。trueであれば単一の文字列、falseであれば値の配列を返します。省略した場合falseです。
実行内容の詳細
PostMetaの情報は、$wpdb->postmetaという新しいテーブルに保存されています。このテーブルには4つのフィールドがあります。
- meta_id : エントリーの個別ID
- post_id : 関係する投稿のID
- meta_key
- meta_value
このテーブルからの値は、wp-blog-header.phpの中で、$posts配列の後の$post_meta_cacheという構造化された多次元配列に入れられます。$postsには現在のページを構築するための投稿の値のリストだけが含まれています。
例えば記事ID256の、"reading"というkeyの値を取得する場合は
$readinglist = $post_meta_cache[256]['reading'];
というようにします。$readinglistが配列という点に注意してください。
WordPress 2.1から、$post_meta_cacheにはデータが投入されません。メタの値は以下の関数で取得してください。
内部関数
これらの関数はループの中で使用される事を意図してます。返り値は全て配列です。
- get_post_custom([$post_id])
-
$post_idを省略すると、現在の投稿。
$custom_fields = get_post_custom(); $my_custom_field = $custom_fields['my_custom_field']; foreach ( $my_custom_field as $key => $value ) echo $key . " => " . $value . "<br />"; - get_post_custom_keys([$post_id])
-
$post_idを省略すると、現在の投稿。
$custom_field_keys = get_post_custom_keys(); foreach ( $custom_field_keys as $key => $value ) echo $key . " => " . $value . "<br />"; - get_post_custom_values($key[, $post_id])
-
$post_idを省略すると、現在の投稿。
$mykey_values = get_post_custom_values('my_key'); foreach ( $mykey_values as $key => $value ) { echo $key . " => " . $value . "<br />"; }


コメントする