カスタムフィールドの利用方法

任意の値を取得

カスタムフィールドの利用方法、ショートコードと連携する方法について、スクリプトサンプルを紹介しながら解説しています。

カスタムフィールドデータを取得する関数

カスタムフィールドデータは、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行目では、定義した関数をショートコードとして登録しています。

Copyright (C) 2008-2009. さくらインターネットでWordPress All rights reserved.