2016-03-03 56 views
1

我正在使用Advanced Custom Fields(ACF)并尝试以编程方式向现有组(group_5621b0871e1b1)添加中继器,但它不起作用。相同的代码适用于文本字段,但不适用于中继器。ACF以编程方式添加中继器

在我的插件:

add_action('acf/init', 'acf_add_field_royalties'); 
function acf_add_field_royalties() { 
    if (function_exists('acf_add_local_field_group')) { 
     acf_add_local_field(array (
      'key' => 'field_store_royalties', 
      'label' => 'Royalties', 
      'name' => 'store_royalties1', 
      'type' => 'repeater', 
      'parent'  => 'group_5621b0871e1b1', 
      'instructions' => '', 
      'required' => 0, 
      'conditional_logic' => 0, 
      'wrapper' => array (
       'width' => '', 
       'class' => '', 
       'id' => '', 
      ), 
      'collapsed' => '', 
      'min' => '', 
      'max' => '', 
      'layout' => 'table', 
      'button_label' => 'Add new royalty period', 
      'sub_fields' => array (
       array (
        'key' => 'field_start_date', 
        'label' => 'Start Date', 
        'name' => 'start_date1', 
        'type' => 'date_picker', 
        'instructions' => '', 
        'required' => 1, 
        'display_format' => 'F j, Y', 
        'return_format' => 'd/m/Y', 
        'first_day' => 1, 
       ), 
       array (
        'key' => 'field_end_date', 
        'label' => 'End date', 
        'name' => 'end_date1', 
        'type' => 'date_picker', 
        'instructions' => '', 
        'display_format' => 'F j, Y', 
        'return_format' => 'd/m/Y', 
        'first_day' => 1, 
       ), 
       array (
        'key' => 'field_royalty_rate', 
        'label' => 'Royalty Rate', 
        'name' => 'royalty_rate1', 
        'type' => 'number', 
        'instructions' => '', 
        'required' => 1, 
        'wrapper' => array (
         'width' => '', 
         'class' => '', 
         'id' => '', 
        ), 
        'default_value' => 0, 
        'placeholder' => '', 
        'prepend' => '', 
        'append' => '%', 
        'min' => 0, 
        'max' => 100, 
        'step' => 1, 
        'readonly' => 0, 
        'disabled' => 0, 
       ) 
      ) 
     )); 
    } 
} 

它表明这个错误的group_5621b0871e1b1组:

Warning: Invalid argument supplied for foreach() in /usr/share/nginx/html/wordpress4/wp-content/plugins/advanced-custom-fields-pro/pro/fields/repeater.php on line 255 
Warning: Invalid argument supplied for foreach() in /usr/share/nginx/html/wordpress4/wp-content/plugins/advanced-custom-fields-pro/pro/fields/repeater.php on line 320 

难道我做错了什么? 是否有可能以编程方式添加中继器。

+0

你有没有问对ACF支持论坛这个问题? – Baerkins

回答

0

由于中继器字段是使用acf_add_local_field添加的,因此每个子字段也需要与acf_add_local_field一起添加。

  • 删除所有的子场,其中包括'subfields' => array 线,从中继器字段。
  • 在新的子域中添加每个子域acf_add_local_field
  • 添加子域时,确保将'parent' => 'repeater_field_key'添加到子域。

现在您的代码看起来像:

add_action('acf/init', 'acf_add_field_royalties'); 

function acf_add_field_royalties() { 
    if (function_exists('acf_add_local_field_group')) { 
     /** 
     * Initial Repeater Field 
     * 
     */ 
     acf_add_local_field(array (
      'key'    => 'field_store_royalties', 
      'label'    => 'Royalties', 
      'name'    => 'store_royalties1', 
      'type'    => 'repeater', 
      'parent'   => 'group_5621b0871e1b1', 
      'instructions'  => '', 
      'required'   => 0, 
      'conditional_logic' => 0, 
      'wrapper'   => array (
       'width'    => '', 
       'class'    => '', 
       'id'    => '', 
      ), 
      'collapsed'   => '', 
      'min'    => '', 
      'max'    => '', 
      'layout'   => 'table', 
      'button_label'  => 'Add new royalty period' 
     )); 

     /** 
     * Add Start Date Subfield 
     * 
     */ 
     acf_add_local_field(array (
      'key'   => 'field_start_date', 
      'label'   => 'Start Date', 
      'name'   => 'start_date1', 
      'parent'   => 'field_store_royalties', // key of parent repeater 
      'type'   => 'date_picker', 
      'instructions' => '', 
      'required'  => 1, 
      'display_format' => 'F j, Y', 
      'return_format' => 'd/m/Y', 
      'first_day'  => 1, 
     )); 

     /** 
     * Add End Date Subfield 
     * 
     */ 
     acf_add_local_field(array (
      'key'   => 'field_end_date', 
      'label'   => 'End date', 
      'name'   => 'end_date1', 
      'parent'   => 'field_store_royalties', // key of parent repeater 
      'type'   => 'date_picker', 
      'instructions' => '', 
      'display_format' => 'F j, Y', 
      'return_format' => 'd/m/Y', 
      'first_day'  => 1, 
     )); 

     /** 
     * Add Royalty Rate Subfield 
     * 
     */ 
     acf_add_local_field(array (
      'key'   => 'field_royalty_rate', 
      'label'   => 'Royalty Rate', 
      'name'   => 'royalty_rate1', 
      'parent'   => 'field_store_royalties', // key of parent repeater 
      'type'   => 'number', 
      'instructions' => '', 
      'required'  => 1, 
      'wrapper'  => array (
       'width'   => '', 
       'class'   => '', 
       'id'   => '', 
      ), 
      'default_value' => 0, 
      'placeholder' => '', 
      'prepend'  => '', 
      'append'  => '%', 
      'min'   => 0, 
      'max'   => 100, 
      'step'   => 1, 
      'readonly'  => 0, 
      'disabled'  => 0, 
     )); 
    } 
}