【分かりやすい!】ACFで追加したカスタムフィールドをPHPで管理する

実現したいこと

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で編集した選択肢がすべて表示されていることが確認

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です