Wordpress ACF 以编程方式向灵活内容添加行
Wordpress ACF add row to flexible content programmatically
我想在 post 的灵活内容字段中添加一行。
我使用导出工具中的代码创建我的 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' => '',
),
当我创建或编辑 post 时,我可以看到并使用这些字段。
现在我有一个导入 posts 的脚本,我想以编程方式将字段 Tekst (1 blok per rij)
添加为新行。
我试过使用 add_sub_row
和 update_field
但 none 工作正常。
当我像这样使用 add_sub_row
时,我总是得到 return 值 false
:
add_sub_row([ 'field_5c4a0645c3baa', 1, 'field_5c4a0666c3bab'], [
'field_5c4a0666c3bab' => 'test'
], $post)
当我使用 update_field
时,我确实得到了一个回复,看起来该字段已被添加,但是当我转到 wp-admin 并打开 post:
update_field('field_5c4a0645c3baa', [
'acf_fc_layout' => 'text',
'text_content' => 'test'
], $post)
我该如何使用这些方法?因为我试过使用ACF的手册,但是我不太明白如何把它用在灵活的内容上。
我已经联系了 ACF 支持。
他们告诉我:
Thanks for reaching out to us.
Unfortunately, I'm afraid it's not possible to add using the add_row
function with the flexible content field.
However, you could implement a custom solution using the update_field
function to add sub_rows to the flexible content field.
The developer already has it in his todo and probably this option will
be available in future updates.
Apologies for the inconvenience.
后来他们这样回复:
Thanks for the follow up.
Ideally, you need to load the field, modify the field values and
update the field using update_field.
Kindly have a look at the following article from the support forums.
https://support.advancedcustomfields.com/forums/topic/issues-with-add_rows-and-flexible-content/
Hope this helps.
link 帮助我在灵活的内容中创建了一个新行。
使用此代码:
$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);
现在可以正常使用了。
我想在 post 的灵活内容字段中添加一行。 我使用导出工具中的代码创建我的 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' => '',
),
当我创建或编辑 post 时,我可以看到并使用这些字段。
现在我有一个导入 posts 的脚本,我想以编程方式将字段 Tekst (1 blok per rij)
添加为新行。
我试过使用 add_sub_row
和 update_field
但 none 工作正常。
当我像这样使用 add_sub_row
时,我总是得到 return 值 false
:
add_sub_row([ 'field_5c4a0645c3baa', 1, 'field_5c4a0666c3bab'], [
'field_5c4a0666c3bab' => 'test'
], $post)
当我使用 update_field
时,我确实得到了一个回复,看起来该字段已被添加,但是当我转到 wp-admin 并打开 post:
update_field('field_5c4a0645c3baa', [
'acf_fc_layout' => 'text',
'text_content' => 'test'
], $post)
我该如何使用这些方法?因为我试过使用ACF的手册,但是我不太明白如何把它用在灵活的内容上。
我已经联系了 ACF 支持。 他们告诉我:
Thanks for reaching out to us.
Unfortunately, I'm afraid it's not possible to add using the add_row function with the flexible content field.
However, you could implement a custom solution using the update_field function to add sub_rows to the flexible content field.
The developer already has it in his todo and probably this option will be available in future updates.
Apologies for the inconvenience.
后来他们这样回复:
Thanks for the follow up.
Ideally, you need to load the field, modify the field values and update the field using update_field.
Kindly have a look at the following article from the support forums.
https://support.advancedcustomfields.com/forums/topic/issues-with-add_rows-and-flexible-content/
Hope this helps.
link 帮助我在灵活的内容中创建了一个新行。
使用此代码:
$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);
现在可以正常使用了。