Получить значения мета-полей гибких элементов содержимого ACF с помощью get_post_meta - WordPress - PullRequest
0 голосов
/ 05 июля 2018

Спасибо за вашу помощь заранее. Вот чего я пытаюсь достичь:

У меня есть пользовательский тип записи под названием «Кампании», и у меня есть пользовательская таксономия под названием «Страны», связанная с пользовательским типом записи кампании. Когда пользователь добавляет новую страну в кампанию, создается новый пост кампании, который является дочерним элементом текущей кампании. Я дублирую поля ACF, которые назначены родительской кампании, и реплицирую значения в дочернем посте, однако я столкнулся с проблемой, связанной с полями гибкого контента ACF. Вот фрагмент моего кода, который извлекает поля родительской записи и обновляет вновь созданное поле ACF в дочерней записи этим значением.

$action_text = get_post_meta($parent_id, 'action_text', true);
update_field('action_text', $action_text, $post_id);

Я пытался сделать это с гибким контентом, но я знаю, что мне нужно пройтись по нему и найти, какие блоки контента были созданы. Каков наилучший способ сделать это?

// About Fields
        $about_fields = get_post_meta($parent_id, 'content');
        var_dump($about_fields);
        $meta_key = // How to retrieve the flexible content keys
        $meta_value_of_flexible_content = get_post_meta($parent_id, $meta_key);

        if($about_fields) {

        }

Для пояснения 'content' - это имя гибкого контейнера. 'text_and_image' - это пример имени одного из созданных мной гибких блоков контента.

Еще раз спасибо за любые идеи.

1 Ответ

0 голосов
/ 05 июля 2018

Я пытался сделать это с гибким контентом, но я знаю, что нужно зацикливаться и найдите, какие блоки контента были созданы.

Вы можете просто использовать функции get_field() и update_field() для дублирования любых полей ACF, включая поля гибкого содержимого.

Например, для клонирования поля целом content:

$about_fields = get_field( 'content', $parent_id );
if ( $about_fields ) {
    update_field( 'content', $about_fields, $post_id );
}

// How to retrieve the flexible content keys

foreach ( $about_fields as $arr ) {
    echo 'Layout: ' . $arr['acf_fc_layout']; // e.g. "Layout: text_and_image"

    // The rest of items in `$arr` are the SUB-fields of that specific layout as
    // identified by the `$arr['acf_fc_layout']`, which is the layout's name. So
    // if you have two SUB-fields named `text1` and `image1` respectively, then
    // these items are set: `$arr['text1']` and `$arr['image1']`
}

Дополнительный код

Для клонирования всех полей ACF:

$fields = get_fields( $parent_id );
foreach ( $fields as $name => $value ) {
    update_field( $name, $value, $post_id );
}

Дополнительное примечание

Я бы изменил это, чтобы использовать функцию get_field():

$action_text = get_post_meta($parent_id, 'action_text', true);

Итак:

$action_text = get_field('action_text', $parent_id);
...