如何从父字段中自动填充子字段选择

How to auto-populate sub-field selects from within a parent field

本文关键字:字段 填充 选择      更新时间:2023-09-26

我在这里使用ACF教程来构建。我想做的是使用文本子字段中的值来填充相同中继器字段内的其他选择子字段。我知道这听起来是递归的,也许这让人望而却步。字段admin将不会是ajax-y或在飞行中更新,它更像是其他网站功能的管理字段。

无论如何,这是我目前为止所知道的。

  • ACF中继器字段= core_values
  • 字段所在的页面= 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');

显然,这并没有像我希望的那样传播select子字段。

问题:-这是可能的(value_name字段都已经填满了值)-函数代码应该放在哪里?-也许我把代码弄乱了

提前感谢!

我实现了我所寻找的功能,首先将这些全部移动到一个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');