制作記事 Web制作アプリケーションWordPressAdvanced Custom Fields を使った条件分岐(セレクトボックス、チェックボックス、ラジオボタン、真偽)のテンプレート記述方法

Advanced Custom Fields を使った条件分岐(セレクトボックス、チェックボックス、ラジオボタン、真偽)のテンプレート記述方法

前回、「入力フォームを自由にカスタマイズできる「Advanced Custom Fields」」で基本的なフィールド名を出力方法を紹介したが、今度は条件分岐に関する出力方法の備忘録。
カスタムフィールド登録時、フィールドタイプを「セレクトボックス、チェックボックス、ラジオボタン、真偽」のいずれかを選択した場合。
基本同様、get_field(‘フィールド名’) で情報を取得できるが、何が返却されるかはどのようにフィールド登録したかで異なる。

セレクトボックス

フィールドタイプを「セレクトボックス」、選択肢をこのように登録したとする。

red : 赤
blue : 青
green : 緑
yellow : 黄

「複数の値を選択できるか?」を「いいえ」にした場合

get_field(‘フィールド名’) は、選択したキー(red, blue…)を返却。
フィールド登録時「無を許可する」で「はい」にした場合、何も選択しないで公開した場合は「FALSE」が返却される。

「複数の値を選択できるか?」を「はい」にした場合

get_field(‘フィールド名’) は、配列を返却。
配列には、選択したキー(red, blue…)が格納されている。
フィールド登録時「無を許可する」で「はい」にした場合、デフォルトを選択もしくは何も選択しない場合は「NULL」が返却される。

選択したキーではなく「値(赤, 青…)」を取得する場合

get_field_object(‘フィールド名’) を使うと、フィールド名に関数情報がいろいろ返却されてくるので、その中にあるキーと値の情報を使う。

フィールド登録時、「複数の値を選択できるか?」を「いいえ」にした場合
$field_name = 'フィールド名';
$field = get_field_object($field_name);
$field_key = get_field($field_name);
if ($field_key) {
    $label = $field['choices'][$field_key];
}
フィールド登録時、「複数の値を選択できるか?」を「はい」にした場合
$field_name = 'フィールド名';
$field = get_field_object($field_name);
$field_array = get_field($field_name);
foreach($field_array as $key) {
    if ($field['choices'][$key]) {
        $label = $field['choices'][$key];
    }
}

ちなみに、get_field_object() を使わなくても、キーと値を同じにしてフィールド登録しておくのもひとつの解決策。

赤 : 赤
青 : 青
緑 : 緑
黄 : 黄

これは、下記のようにしてもOK。

赤
青
緑
黄

チェックボックス

テンプレートへの記述方法は、「セレクトボックス」の場合の「複数の値を選択できるか?」を「はい」にした場合と同じ。

$field_name = 'フィールド名';
$field = get_field_object($field_name);
$field_array = get_field($field_name);
foreach($field_array as $key) {
    if ($field['choices'][$key]) {
        $label = $field['choices'][$key];
    }
}

ラジオボタン

テンプレートへの記述方法は、「セレクトボックス」の場合の「複数の値を選択できるか?」を「いいえ」にした場合と同じ。

$field_name = 'フィールド名';
$field = get_field_object($field_name);
$field_key = get_field($field_name);
if ($field_key) {
    $label = $field['choices'][$field_key];
}

真偽

if (get_field('フィールド名')) {
    // チェックして公開された場合
} else {
    // チェックなしで公開された場合
}