実現したいこと
ACF(Advanced Custom Field)で作成したカスタムフィールドの選択肢をPHPで管理したい(カスタム投稿で追加されたら、自動的に表示されるようにしたい)
カスタム投稿「関連主要製品」で投稿した分だけ選択肢に表示されるようにしたい
ACFで追加したカスタムフィールドをPHPで編集する手順
1) カスタムフィールドで作成されたPHPをコピー
【カスタムフィールド / Tools / フィールドグループをエクスポート / Generate PHP】
表示されたPHPを「Copy to clipboard」をクリックでコピー
2) コピーしたコードをfunctions.phpにペースト
今回私は選択肢をPHPで管理したかったので、貼り付けたコードの中で下記を変更しました。
変更前
‘choices’ => array(
’テスト’ => ‘テスト’,
),
変更後
'choices' => $choices,
$choicesの内容
カスタム投稿(プラグイン名:Custom Post Type UI)で作成した投稿をすべて取得し、スラッグ名(post_name)をキーとし、投稿名(post_title)を配列に入れる。
/**
* 関連主要製品の選択肢を取得
*/
function getRelatedProducts() {
$args = array(
'post_type' => 'related_products',
'numberposts' => -1,
);
$related_products = get_posts($args);
return $related_products;
}
$related_products = getRelatedProducts();
$choices = [];
foreach($related_products as $related_product) {
$choices[$related_product->post_name] = $related_product->post_title;
}
ACFからコピーし、PHPを書き換えてfuncrions.phpにペーストした内容
if( function_exists('acf_add_local_field_group') ):
acf_add_local_field_group(array(
'key' => 'group_5fd975b9983ca',
'title' => '関連主要製品選択ボックス',
'fields' => array(
array(
'key' => 'field_5fd990cd8d08f',
'label' => '関連主要製品選択ボックス',
'name' => 'related_products_options',
'type' => 'checkbox',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array(
'width' => '',
'class' => '',
'id' => '',
),
'choices' => $choices,
'allow_custom' => 0,
'default_value' => array(
),
'layout' => 'vertical',
'toggle' => 0,
'return_format' => 'value',
'save_custom' => 0,
),
),
'location' => array(
array(
array(
'param' => 'post_type',
'operator' => '==',
'value' => 'page',
),
),
array(
array(
'param' => 'page_template',
'operator' => '==',
'value' => 'page-product.php',
),
),
),
'menu_order' => 0,
'position' => 'acf_after_title',
'style' => 'default',
'label_placement' => 'top',
'instruction_placement' => 'label',
'hide_on_screen' => '',
'active' => true,
'description' => '',
));
endif;
3) (必要があれば)各固定ページにACFを表示させる
各固定ページ右上の「歯車」から「オプション」を選択
追加したACFを選択
各固定ページに表示されているか確認
PHPで編集した選択肢がすべて表示されていることが確認