Как программно добавить группу ACF в бэкэнд Wordpress? - PullRequest
1 голос
/ 07 января 2020

Я перепробовал множество различных функций и подходов, но до сих пор не смог заставить его работать. Цель состоит в том, чтобы добавить группу расширенных настраиваемых полей в бэкэнд Wordpress с некоторым кодом PHP. В лучшем случае мы добавляем PHP -код к методу класса.

public function create_group( $group_name ) {

    if ( $this->does_group_already_exists( $group_name ) ) {
        return false;
    }

    acf_add_local_field_group( array(
        'key'      => 'group_1',
        'title'    => 'My Group',
        'fields'   => array(
            array(
                'key'   => 'field_1',
                'label' => 'Sub Title',
                'name'  => 'sub_title',
                'type'  => 'text',
            )
        ),
        'location' => array(
            array(
                array(
                    'param'    => 'post_type',
                    'operator' => '==',
                    'value'    => 'post',
                ),
            ),
        ),
    ) );

    return true;
}

Ничего не добавляется с кодом выше. Я также попытался добавить его к functions.php и с помощью функции add_action(), например, так:

add_action( 'acf/init', array( $this, 'create_group' ) );

Но опять же, никаких результатов.

Надеюсь, кто-нибудь может поделиться рабочим решением.

Ответы [ 2 ]

0 голосов
/ 13 января 2020

Сегодня я наконец-то нашел решение для динамического добавления группы ACF в бэкэнд с PHP -кодом.

Это можно сделать, добавив новое сообщение непосредственно с типом сообщения acf-field-group. Вот моя реализация для тех удивительных людей из будущего, которые интересуются:

public function create_form( $form_name ) {

    $new_post = array(
        'post_title'     => $form_name,
        'post_excerpt'   => sanitize_title( $form_name ),
        'post_name'      => 'group_' . uniqid(),
        'post_date'      => date( 'Y-m-d H:i:s' ),
        'comment_status' => 'closed',
        'post_status'    => 'publish',
        'post_type'      => 'acf-field-group',
    );
    $post_id  = wp_insert_post( $new_post );

    return $post_id;
}

Где $form_name - название группы ACF. Оно работает. И не было необходимости использовать специфицированный c хук. Я мог бы просто вызвать этот метод напрямую.

0 голосов
/ 07 января 2020

На самом деле вы можете создать такой код поверх ACF в самом WP-Backend (не уверен, работает ли он только в ACF Pro). Под Admin -> Пользовательские поля -> Инструменты -> Экспорт -> Создать PHP. Сгенерированный код является отличной отправной точкой для программной c интеграции ACF.

Он должен выглядеть примерно так:

acf_add_local_field_group(array(
    'key' => 'group_5d146d18eeb92',
    'title' => 'My Group Title',
    'fields' => array(
        array(
            'key' => 'field_5d146d1f27577',
            'label' => 'My Field Title',
            'name' => 'my_field_name',
            'type' => 'true_false',
            'instructions' => '',
            'required' => 0,
            'conditional_logic' => 0,
            'wrapper' => array(
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'message' => '',
            'default_value' => 0,
            'ui' => 1,
            'ui_on_text' => '',
            'ui_off_text' => '',
        ),
    ),
    'location' => array(
        array(
            array(
                'param' => 'post_type',
                'operator' => '==',
                'value' => 'my_custom_post_type',
            ),
        ),
    ),
    'menu_order' => 0,
    'position' => 'side',
    'style' => 'default',
    'label_placement' => 'top',
    'instruction_placement' => 'label',
    'hide_on_screen' => '',
    'active' => true,
    'description' => '',
));

Проверьте страницу ACF для регистрации полей через PHP.

...