このような設定と仮定して、グループに設定された
・おつまみ
・ドリンク
・デザート
というラベルを取得してみます。
まずは、wpdb クラスのメソッドを利用するために、$wpdb オブジェクトをグローバル変数として宣言します。
global $wpdb;
次に、Advanced Custom Fields のフィールドグループのタイトル(今回の例では「メニュー」)からフィールドグループのIDを取得します。
$field_groups_id = $wpdb->get_var( "SELECT ID FROM $wpdb->posts WHERE post_type = 'acf-field-group' AND post_title = 'メニュー' AND post_status = 'publish'" );
フィールドグループのIDは消さない限り変わることはないので、
$field_groups_id = 186;
のように直接指定してしまってもOKです。
IDは設定画面のURLから確認できます。
例)wp-admin/post.php?post=186&action=edit
次に、取得したフィールドグループのIDと取得したいフィールド名(今回の例では「menu_category」)から設定内容を取得します。
$field_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type = 'acf-field' AND post_parent = %d AND post_excerpt = 'menu_category'", $field_groups_id ) );
最後に、取得したフィールドのIDからフィールドの設定内容を取得します。
$field_content = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_type = 'acf-field' AND post_parent = %d", $field_id ) );
まとめるとこんな感じです
$field_contents = array (); global $wpdb; if ( $field_groups_id = $wpdb->get_var( "SELECT ID FROM $wpdb->posts WHERE post_type = 'acf-field-group' AND post_title = 'メニュー' AND post_status = 'publish'" ) ) { if ( $field_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type = 'acf-field' AND post_parent = %d AND post_excerpt = 'menu_category'", $field_groups_id ) ) ) { $results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_type = 'acf-field' AND post_parent = %d", $field_id ) ); foreach ( $results as $row ) { $field_contents[] = esc_html( $row->post_title ); } } } print_r( $field_contents );
取り出しやすいように配列に格納しています。
出力結果
$field_contents = array (); Array ( [0] => おつまみ [1] => ドリンク [2] => デザート )