首页 > 解决方案 > Wordpress ACF 以编程方式向灵活内容添加行

问题描述

我想在我的帖子灵活内容字段中添加一行。我使用导出工具中的代码创建了我的 ACF 字段,这是其中的一部分:

acf_add_local_field_group(array(
        'key' => 'group_5c4c39a08349a',
        'title' => 'Posts page',
        'fields' => array(
            array(
                'key' => 'field_5c4c39aab1ed4',
                'label' => 'Blokken positie',
                'name' => 'block_position',
                'type' => 'radio',
                'instructions' => 'Geef aan waar de pagina blokken geplaatst moeten worden',
                'required' => 1,
                'conditional_logic' => 0,
                'wrapper' => array(
                    'width' => '',
                    'class' => '',
                    'id' => '',
                ),
                'choices' => array(
                    0 => 'Boven de berichten',
                    1 => 'Onder de berichten',
                ),
                'allow_null' => 0,
                'other_choice' => 0,
                'default_value' => 1,
                'layout' => 'vertical',
                'return_format' => 'value',
                'save_other_choice' => 0,
            ),
        ),
        'location' => array(
            array(
                array(
                    'param' => 'page_type',
                    'operator' => '==',
                    'value' => 'posts_page',
                ),
            ),
        ),
        'menu_order' => 6,
        'position' => 'normal',
        'style' => 'default',
        'label_placement' => 'top',
        'instruction_placement' => 'label',
        'hide_on_screen' => '',
        'active' => true,
        'description' => '',
    ));

    acf_add_local_field_group(array(
        'key' => 'group_5c4a061a6be68',
        'title' => 'Page/ Post blocks',
        'fields' => array(
            array(
                'key' => 'field_5c4a0645c3baa',
                'label' => 'Blocks',
                'name' => 'blocks',
                'type' => 'flexible_content',
                'instructions' => '',
                'required' => 0,
                'conditional_logic' => 0,
                'wrapper' => array(
                    'width' => '',
                    'class' => '',
                    'id' => '',
                ),
                'layouts' => array(
                    'layout_5c4a084c7953b' => array(
                        'key' => 'layout_5c4a084c7953b',
                        'name' => 'news_slider',
                        'label' => 'Nieuws slider',
                        'display' => 'block',
                        'sub_fields' => array(
                            array(
                                'key' => 'field_5c4a085f7953e',
                                'label' => 'Type',
                                'name' => 'type',
                                'type' => 'select',
                                'instructions' => '',
                                'required' => 0,
                                'conditional_logic' => 0,
                                'wrapper' => array(
                                    'width' => '',
                                    'class' => '',
                                    'id' => '',
                                ),
                                'choices' => array(
                                    0 => 'Laatste berichten',
                                    1 => 'Berichten uit een categorie',
                                    2 => 'Zelf de berichten selecteren',
                                ),
                                'default_value' => array(
                                ),
                                'allow_null' => 0,
                                'multiple' => 0,
                                'ui' => 0,
                                'return_format' => 'value',
                                'ajax' => 0,
                                'placeholder' => '',
                            ),
                            array(
                                'key' => 'field_5c4ac2d1986b9',
                                'label' => 'Aantal nieuws artikelen',
                                'name' => 'news_items',
                                'type' => 'number',
                                'instructions' => '',
                                'required' => 0,
                                'conditional_logic' => array(
                                    array(
                                        array(
                                            'field' => 'field_5c4a085f7953e',
                                            'operator' => '==',
                                            'value' => '0',
                                        ),
                                    ),
                                    array(
                                        array(
                                            'field' => 'field_5c4a085f7953e',
                                            'operator' => '==',
                                            'value' => '1',
                                        ),
                                    ),
                                ),
                                'wrapper' => array(
                                    'width' => '',
                                    'class' => '',
                                    'id' => '',
                                ),
                                'default_value' => 9,
                                'placeholder' => '',
                                'prepend' => '',
                                'append' => '',
                                'min' => 3,
                                'max' => 18,
                                'step' => 3,
                            ),
                            array(
                                'key' => 'field_5c4a093b2ba54',
                                'label' => 'Toon nieuws uit categorie',
                                'name' => 'news_category',
                                'type' => 'taxonomy',
                                'instructions' => '',
                                'required' => 0,
                                'conditional_logic' => array(
                                    array(
                                        array(
                                            'field' => 'field_5c4a085f7953e',
                                            'operator' => '==',
                                            'value' => '1',
                                        ),
                                    ),
                                ),
                                'wrapper' => array(
                                    'width' => '',
                                    'class' => '',
                                    'id' => '',
                                ),
                                'taxonomy' => 'category',
                                'field_type' => 'select',
                                'allow_null' => 0,
                                'add_term' => 1,
                                'save_terms' => 0,
                                'load_terms' => 0,
                                'return_format' => 'object',
                                'multiple' => 0,
                            ),
                            array(
                                'key' => 'field_5c4a09e7ee82f',
                                'label' => 'Selecteer nieuws berichten',
                                'name' => 'news_item_collection',
                                'type' => 'repeater',
                                'instructions' => 'De slider laat 3 items per slide zien. Zorg dat het aantal items deelbaar is door 3.',
                                'required' => 0,
                                'conditional_logic' => array(
                                    array(
                                        array(
                                            'field' => 'field_5c4a085f7953e',
                                            'operator' => '==',
                                            'value' => '2',
                                        ),
                                    ),
                                ),
                                'wrapper' => array(
                                    'width' => '',
                                    'class' => '',
                                    'id' => '',
                                ),
                                'collapsed' => '',
                                'min' => 0,
                                'max' => 0,
                                'layout' => 'table',
                                'button_label' => '',
                                'sub_fields' => array(
                                    array(
                                        'key' => 'field_5c4a0a08ee830',
                                        'label' => 'Nieuws item',
                                        'name' => 'news_item',
                                        'type' => 'post_object',
                                        'instructions' => '',
                                        'required' => 0,
                                        'conditional_logic' => 0,
                                        'wrapper' => array(
                                            'width' => '',
                                            'class' => '',
                                            'id' => '',
                                        ),
                                        'post_type' => array(
                                            0 => 'post',
                                        ),
                                        'taxonomy' => '',
                                        'allow_null' => 0,
                                        'multiple' => 0,
                                        'return_format' => 'object',
                                        'ui' => 1,
                                    ),
                                ),
                            ),
                        ),
                        'min' => '',
                        'max' => '',
                    ),
                    'layout_5c4a065576f71' => array(
                        'key' => '5c4a065576f71',
                        'name' => 'text',
                        'label' => 'Tekst (1 blok per rij)',
                        'display' => 'block',
                        'sub_fields' => array(
                            array(
                                'key' => 'field_5c4a0666c3bab',
                                'label' => 'Tekst',
                                'name' => 'text_content',
                                'type' => 'wysiwyg',
                                'instructions' => 'Het wordt afgeraden om in deze editor afbeeldingen in te voegen. Gebruik bij voorkeur het block "Afbeelding" hiervoor.',
                                'required' => 0,
                                'conditional_logic' => 0,
                                'wrapper' => array(
                                    'width' => '',
                                    'class' => '',
                                    'id' => '',
                                ),
                                'default_value' => '',
                                'tabs' => 'visual',
                                'toolbar' => 'full',
                                'media_upload' => 1,
                                'delay' => 0,
                            ),
                        ),
                        'min' => '',
                        'max' => '',
                    ),

当我创建或编辑帖子时,我可以看到和使用这些字段。现在我有一个脚本来导入帖子,我想以Tekst (1 blok per rij)编程方式将该字段添加为新行。我试过使用add_sub_rowupdate_field但没有一个能正常工作。

当我add_sub_row这样使用时,我总是得到一个返回值false

add_sub_row([ 'field_5c4a0645c3baa', 1, 'field_5c4a0666c3bab'], [
    'field_5c4a0666c3bab' => 'test'
], $post)

当我使用时,update_field我确实得到了一个响应,看起来好像该字段已添加,但是当我去 wp-admin 并打开帖子时我看不到它:

update_field('field_5c4a0645c3baa', [
    'acf_fc_layout' => 'text',
    'text_content' => 'test'
], $post)

我应该如何使用这些方法?因为我尝试过使用 ACF 的手册,但我真的不明白如何将它用于灵活的内容。

标签: wordpressadvanced-custom-fieldsacfpro

解决方案


我已经联系了 ACF 支持。他们告诉我:

感谢您与我们联系。

不幸的是,恐怕无法使用带有灵活内容字段的 add_row 函数进行添加。

但是,您可以使用 update_field 函数实现自定义解决方案,将 sub_rows 添加到灵活内容字段。

开发人员已经在他的待办事项中包含了它,并且这个选项可能会在未来的更新中可用。

造成的不便,深表歉意。

后来他们这样回答:

感谢您的跟进。

理想情况下,您需要加载字段、修改字段值并使用 update_field 更新字段。

请查看支持论坛中的以下文章。

https://support.advancedcustomfields.com/forums/topic/issues-with-add_rows-and-flexible-content/

希望这可以帮助。

该链接帮助我在灵活的内容中创建了一个新行。

使用此代码:

$row_i = add_row(
    'field_55ce0e107c687', 
    [
        'acf_fc_layout' => 'headline', 
        'field_55df18296e4b3' => 'headline text'
    ],
    $ID
);

所以我不得不将它调整为我的字段名称:

add_row(
    'field_5c4a0645c3baa', [
    'acf_fc_layout'       => 'text',
    'field_5c4a0666c3bab' => $block[ 'value' ],
], $post);

现在它工作正常。


推荐阅读