カスタムフィールドの利用方法
任意の値を取得
カスタムフィールドの利用方法、ショートコードと連携する方法について、スクリプトサンプルを紹介しながら解説しています。
カスタムフィールドデータを取得する関数
カスタムフィールドデータは、the_meta()を用いると取得できますが、この場合は出力が順不同リスト(<ul>)に固定されています。
出力形式等を変更したい場合は、カスタムフィールドデータを取得する以下の関数を使用します。 返り値は全て配列です。
get_post_custom();キー値の配列を返す get_post_custom_keys();キーの配列を返す get_post_custom_values($key);指定したキーに対応する値の配列を返す
例えば、カスタムフィールドのキーと値をテーブルで表示する場合、以下のようなスクリプトになります。 (スクリプトソースだけを見る場合は»get_post_custom.txt)
$custom_keys = get_post_custom_keys();
if ($custom_keys) {
$outdata = "<table>";
foreach ($custom_keys as $key) {
if ( "_" != substr($key,0,1) ) {
$outdata .= "<tr><td>";
$outdata .= $key;
$outdata .= "</td><td>";
$valuearray = get_post_custom_values($key);
$outdata .= implode(",",$valuearray);
$outdata .= "</td></tr>";
}
}
$outdata .= "</table>";
}
echo $outdata;
カスタムフィールドには、_edit_last等のWordPressが内部で利用している変数が含まれています。 これらの変数は_(アンダーバー)で始まるので、5行目でアンダーバーで始まる場合を除外しています。
get_post_custom_values($key)はキー$keyに対応する値を返しますが、返り値は配列になっています。 このため、10行目でimplode関数を用いて配列を文字列に展開しています。
ショートコードとの連携
WordPressでは、投稿コンテンツにPHPスクリプトを直接記入することができません。 上記のようなスクリプトを記事中で利用したい場合は、テーマのsingle.phpにスクリプトを書き込むか、あるいはショートコードやプラグインを利用する必要があります。
ここではカスタムフィールドとショートコードの連携を取り上げます。 例えば、カスタムフィールドに緯度経度をデータとして格納しておき、ショートコードでGoogleMapを呼び出す、といった使い方の場合、以下のようなスクリプトになります。 (スクリプトソースだけを見る場合は»googlemap_shortcode.txt)
function googlemap_output_func( $atts, $content = null ) {
extract( shortcode_atts( array(
'mapid' => 'map',
'zoom' => '3',
), $atts ));
$lng = implode("",get_post_custom_values("lng"));
$lat = implode("",get_post_custom_values("lat"));
$data = "<script type=\"text/javascript\">\n";
$data .= "//<![CDATA[\n";
$data .= "var map = new GMap(document.getElementById(\"" . $mapid . "\"));\n";
$data .= "map.addControl(new GSmallMapControl());\n";
$data .= "map.centerAndZoom(new GPoint(" . $lng . "," . $lat . ")," . $zoom . ");\n";
$data .= "showMarker();\n";
$data .= "//]]>\n";
$data .= "</script>\n";
return $data;
}
add_shortcode( 'googlemap', 'googlemap_output_func' );
lngはlongitude(経度)、latはlatitude(緯度)の略です。 8行目以降では、GoogleMapを表示するJavascriptへ、カスタムフィールドのデータを受渡ししています。(GoogleMapの利用にはAPIキー取得等の手続きが必要です。詳細はGoogleMAPを参照してください。)
19行目では、定義した関数をショートコードとして登録しています。