spocky さん、こんばんは。
多分、対応する値を設定しておかないと PHP 単体でそういう処理を実現するのは難しいと思います。 (すぐ思いつくのは Google の Ajax Translation API を使って JSON で翻訳した単語を……とかですかね。ただ、JSON をパーズする必要があるのと、毎回呼び出すのはどうかと思うのでキャッシュしたりオプションとして保存したり余分な手続きが増えてしまいます。)
spocky さんの場合、幸いカスタムフィールドの項目はプルダウンなので、「カエル」「ペンギン」「くじら」など値の種類がある程度決まっていると思いますので、カスタムフィールドで取得した値に対応した英数字を返す辞書的な関数を作成するのが妥当ではないでしょうか。
// テーマの functions.php に追加
// Usage: echo get_converted_post_meta( $post->ID, $key, true );
function get_converted_post_meta( $post_id, $key, $single = false ) {
$dic = array(
'カエル' => 'flog',
'ペンギン' => 'penguin',
'くじら' => 'whale',
);
$post_meta = get_post_meta($post_id, $key, $single);
// 対応するキーを持つ値が設定されていればその値を返す
if ( isset($dic[$post_meta]) ) return $dic[$post_meta];
// 未知の単語はそのまま返す。
return $post_meta;
}
あとは、既にいくつもの投稿でカスタムフィールドの値を設定している場合、全ての投稿について値を再設定しなければならなくなる方法ですが、 Custom Field GUI の cfg-utility.class.php をちょっと改造すれば、カスタムフィールドに保存する値は英語に、プルダウンでの表示は日本語に、というような conf.ini の書式を実現することも出来ます。
配布先の Custom Field GUI の最新版 (v3.0.2) でしたら、 174 行目からの foreach 文を以下のように変更します。
foreach($values as $val ) {
list( $val, $label ) = explode( '@', trim($val), 2 );
if ( empty( $label ) ) $label = $val;
$checked = ( trim($val ) == trim($selected ) ) ? ' selected="selected"' : '';
$inside .= '<option class="data" value="' . $val . '"' . $checked . '> ' . $label. '</option>';
}
あとは、 conf.ini のプルダウン用の設定の value を以下のように「value@ラベル」という書式にすれば OK です。(default の書式は値のみにしないといけません。)
[animal]
fieldname = 動物
type = select
value = flog@カエル#penguin@ペンギン#whale@くじら
default = flog
この改造では、 value を # 区切りで設定した値を更に @ で前後 2 つに分割し、前者を通常の値として、後者をラベルとして使用します(@がない値の場合は、改造前と同じ動作をします)。
ただし @ で前後に分割されるので、制限として @ を値の中で使用できなくなります。例えばプルダウンの項目にメールアドレスを設定したい場合にはおかしな挙動になってしまいます。
そこで、そういう場合には @ 以外の文字で分割するようにカスタマイズする必要がありますが、内部で parse_ini_file() しているので、 ini ファイルの書式で利用されるいくつかの文字を含めるとエラーが発生したり予想外の挙動をします。
他のプルダウン項目にメールアドレス欄があったり、カスタマイズする必要が生じた場合は、上記の
list( $val, $label ) = explode( '@', trim($val), 2 );
の ‘@’ の部分を使わなそうな文字列に書き換え、 conf.ini の書式もそれに合わせて変更するだけです。
ただ、この方法ではプラグインがバージョンアップすると設定が無効になってしまったり、下手をすると予期せぬ動作を起こすようになるおそれもあるので、本来はおすすめすべきではありません。
シンプルに最初の方法を使用されることをおすすめします。
もっと言うと、パス名に関わるような値をプルダウンやチェックボックスで扱うときは全部英数字で統一すればいいんですけどね。