カスタムフィールドを設置するために、これまでは好んでスクラッチしていたのですが、最近は便利なWordPressプラグイン Advanced Custom Fields (以下ACF)を積極的に使うようにしています。やっぱり楽ですからね。
ACFでフィールドタイプを、チェックボックス(checkbox)、プルダウン(select)、ラジオボタン(radio)にすると、選択肢(choices)を設定することになります。この選択肢(choices)をループ外で全部取得する方法です。
ACFには get_field_object() や get_field_objects() というファンクションが準備されています。細かな説明は割愛しますが、投稿と関連付けてなら選択肢を取得することが可能です。今回はループ外で選択肢を取得する方法です。
以下の例では、選択肢だけではなく、フィールドのすべての要素を配列として取得しています。
ACFフィールドのすべての要素を配列として取得
テーマのfunctions.phpにfuncitonを定義:
/*********************************************** * ACFのフィールドグループ設定を取得 ***********************************************/ function get_acf_all_fields_in_group ($group_id) { $acf_post_custom = get_post_custom($group_id); $acf_fields_object = array(); foreach ( $acf_post_custom as $key => $arr ) { if ( preg_match( "/^field_/", $key ) ) { $arr = unserialize($arr[0]); $field_name = $arr['name']; $acf_fields_object[$field_name] = $arr; } } return $acf_fields_object; }
5行目:ACFのフィールドグループのIDをもとにカスタムフィールドの値を取得
9行目:取得した値はシリアライズされた状態なのでアンシリアライズ
10行目:フィールド名をキーとして配列に格納
使用例
以下は、
地域での絞り込み実装のために、カスタムフィールド(area)の選択肢を取得して、チェックボックスを展開している例です。
// 絞り込み条件の取得 $vars = $_GET; if ( isset($vars) ) { foreach ( $vars as $key => $val ) { $$key = $val; } } // フィールドグループIDを指定してフィールド設定を取得 $acf_all_fields = get_acf_all_fields_in_group (2115); // チェックボックスとして展開 if ( isset($acf_all_fields['area']) ) : ?> <form action="" method="get"> <?php foreach ( $acf_all_fields['area']['choices'] as $val ) : ?> <label><input type="checkbox" name="area[]" value="<?php echo $val; ?>" <?php if ( isset( $area ) && in_array( $val, $area ) ) echo 'checked'; ?> /> <?php echo $val; ?></label> <?php endforeach; ?> <input type="submit" value="絞り込み" /> </form> <?php endif;
2行目~:URLからクエリパラメータをパラメータごとに取得
10行目:前述のfuncitonを使ってフィールド設定を取得(パラメータはフィールドグループの投稿ID)
17行目:検索実行後のcheckedもチェック
他の良い方法がありましたらどうぞお教えください!
直接メールしてみる
コメントをどうぞ
コメント:1 件
ドンピシャで、やりたい事が解説されていてとても助かりました!ありがとうございます!