WordPressでカスタムフィールドを出力する方法のまとめ
WordPressでカスタムフィールドの出力方法についていろいろ調べてみました。
大丈夫と思いますが、以下に示すサンプルは次のようなループタグの中で使ってください。
<?php if(have_posts()) : while(have_posts()) : the_post(); ?>
ここにサンプルコードを挿入
<?php endwhile; endif; ?>
1.値を出力する(キーと値が1:1の場合)
キーと値が1:1の場合、値を出力するにはpost_custom()を使います。
<?php echo post_custom($key); ?>
冒頭の画像の「サイズ」の値「3000」を出力するには次のように記述します。
<?php echo post_custom('サイズ'); ?>
2.値を出力する1(キーと値が1:nの場合)
WordPressではひとつのキーに複数の値を記述することができます。
キーと値の対応が1:nの場合、値を出力するにはpost_custom()を使います。
<?php
$values = post_custom($key);
foreach ($values as $value) {
echo $value;
} ?>
画像の「価格」の値「10000」「3000」をまとめて出力するには、次のように記述します。
<?php
$values = post_custom('価格');
foreach ($values as $value) {
echo $value;
} ?>
3.値を出力する2(キーと値が1:nの場合)
キーと値の対応が1:nの場合、get_post_custom()を使う方法もあります。
<?php
$list = get_post_custom();
$values = $list[$key];
foreach ($values as $value) {
echo $value;
}
?>
2項の「価格」の値を出力するには次のように記述します。
<?php
$list = get_post_custom();
$values = $list['価格'];
foreach ($values as $value) {
echo $value;
}
?>
ちなみにpost_custom()はget_post_custom()をラップしているので、post_custom()を使った方が良いでしょう。
4.キーと値を出力する1
キーと値をまとめて出力するには、get_post_custom_keys()とget_post_custom_values()を組み合わせます。
<?php
$keys = get_post_custom_keys();
foreach ( (array) $keys as $key ) {
$keyt = trim($key);
if ( '_' == $keyt{0} )
continue;
$values = get_post_custom_values($key);
$value = implode($values,', ');
echo $key . " " . $value;
}
?>
get_post_custom_keys()は、カスタムフィールドのキーのリストを取得する関数です。パラメータに記事IDを指定すれば特定の記事のカスタムフィールドのキーのリストを取得できます。
get_post_custom_keys($post->ID);
trim関数でキーの先頭文字がアンダースコア「_」のものはスキップするようにしています。これはカスタムフィールドのキーの先頭に「_」が付与されたものは非表示のメタ情報として使用されているためです。カスタムフィールドのキーの先頭にアンダースコアをつけて入力すると管理画面には何も表示されませんが、データは保存されています。
$keyt = trim($key);
if ( '_' == $keyt{0} )
continue;
get_post_custom_keys()は、カスタムフィールドの値のリストを取得する関数です。パラメータに記事IDを指定すれば、特定の記事のカスタムフィールドの値のリストを取得できます。
get_post_custom_values($key, $post->ID);
また、キーに対応する値が複数あるものはimplode関数(Perlでいうjoin)を使ってカンマで区切って出力するようにしています。
$value = implode($values,', ');
この部分はforeach文による出力をするなど、適宜書き換えてください。
5.キーと値を出力する2
キーと値を出力する簡単な方法は、the_meta()を使用します。
<?php the_meta(); ?>
この関数を利用すれば、次のような順不同リストを出力します。
<ul class='post-meta'>
<li><span class='post-meta-key'>サイズ: </span> M</li>
<li><span class='post-meta-key'>価格:</span> 3000</li>
</ul>
6.特定の記事と特定のキーからカスタムフィールドの値を取得
特定の記事と特定のキーからカスタムフィールドの値を取得する場合、get_post_meta()を使用します。
<?php echo get_post_meta($post_id, $key, $single); ?>
記事テンプレートの中であれば次のように記述します。なお$keyに日本語を設定しても正常に取得できないようです。第3パラメータ$singleをtrueにすれば、キーと値の対応が1:nの場合、一番最初のデータを取得します。
<?php echo get_post_meta($post->ID, 'aaa', true); ?>
falseを設定すればリストを取得します。リストの場合は次のようにすれば出力できます。
<?php echo implode(get_post_meta($post->ID, 'aaa', false),', '); ?>
7.参考サイト
参考サイトは以下です。ありがとうございました。
- カスタムフィールドの使い方
- 関数リファレンス/get post meta
- 関数リファレンス/get post custom
- 関数リファレンス/get post custom keys
- 関数リファレンス/get post custom values
- カスタムフィールドに表示されないメタ情報の作り方
- カスタムフィールドの指定したキーの値だけ表示する方法