如何在父字段

时间:2016-11-11 16:28:12

标签: javascript wordpress advanced-custom-fields auto-populate

我正在使用ACF tutorial here to build from. 我想要做的是使用文本子字段中的值来填充同一个转发器字段中的其他选择子字段。我知道它听起来像递归,也许这是令人望而却步的。字段管理员不会是ajax-y或动态更新,它更像是其他网站功能的管理字段。

无论如何,这是我到目前为止所拥有的。

  • ACF Repeater字段= core_values
  • 页面字段为on = valuesadmin
  • core_values = value_name
  • 中的源文本子字段
  • 目标子字段( 每个需要动态传播的选择从value_name)=
    • constructor1_name
    • constructor2_name
    • constructor3_name
    • destructor1_name
    • destructor2_name

我已经尝试修改上面链接的教程中的代码,并将其放在主题的functions.php和插件的主文件中,我正在构建其他自定义函数。

/**
* ACF population functions
*/

function acf_load_core_values_field_choices( $field ) {

// reset choices
$field['choices'] = array();


// if has rows
if( have_rows('core_values', 'valuesadmin') ) {

    // while has rows
    while( have_rows('core_values', 'valuesadmin') ) {

        // instantiate row
        the_row();


        // vars
        $value = get_sub_field('value_name');
        $label = get_sub_field('value_name');


        // append to choices
        $field['constructor1_name'][ $value ] = $label;
        $field['constructor2_name'][ $value ] = $label;
        $field['constructor3_name'][ $value ] = $label;
        $field['destructor1_name'][ $value ] = $label;
        $field['destructor2_name'][ $value ] = $label;

    }

}


// return the field
   return $field;

}

add_filter('acf/load_field/name=constructor1_name',    'acf_load_core_values_field_choices');
add_filter('acf/load_field/name=constructor2_name',   'acf_load_core_values_field_choices');
add_filter('acf/load_field/name=constructor3_name', 'acf_load_core_values_field_choices');
add_filter('acf/load_field/name=destructor1_name', 'acf_load_core_values_field_choices');
add_filter('acf/load_field/name=destructor2_name', 'acf_load_core_values_field_choices');

显然,这并不像我想的那样传播选择子字段。

问题:   - 这是否可行(value_name字段都已填充值)   - 功能代码应该放在哪里?   - 也许我以某种方式破坏了代码

提前致谢!

1 个答案:

答案 0 :(得分:0)

好吧,我通过首先将所有内容移动到ACF选项页面然后创建另一个ACF字段(values_master)来实现我正在寻找的功能,我可以在选项页面的第二个字段中动态填充值。所以我不确定这是否因为某些递归而无效,但它正在工作。

function acf_load_value_field_choices( $field ) {

    // reset choices
    $field['choices'] = array();


    // if has rows
    if( have_rows('values_master', 'option') ) {

        // while has rows
        while( have_rows('values_master', 'option') ) {

            // instantiate row
            the_row();


            // vars
            $value = get_sub_field('value_name');
            $label = get_sub_field('value_name');


            // append to choices
            $field['choices'][ $value ] = $label;

        }

    }


    // return the field
    return $field;

}

add_filter('acf/load_field/name=constructor1_name', 'acf_load_value_field_choices');
add_filter('acf/load_field/name=constructor2_name', 'acf_load_value_field_choices');
add_filter('acf/load_field/name=constructor3_name', 'acf_load_value_field_choices');
add_filter('acf/load_field/name=destructor1_name', 'acf_load_value_field_choices');
add_filter('acf/load_field/name=destructor2_name', 'acf_load_value_field_choices');
add_filter('acf/load_field/name=value_mstr_name', 'acf_load_value_field_choices');