根据其他选择字段(ACF)的选择更新转发器中的选择字段

时间:2016-03-05 09:33:52

标签: wordpress advanced-custom-fields

我一直在寻找这个,我找不到解决方案。我已经阅读了很多关于动态填充选择字段的文章,但是它们实现的方式并不是我想要的。

我在页面上有一个转发器字段,用户可以选择多个行为(来自Act CPT)。

在这些行为中,有一个转发器字段,在该字段中,它们可以添加行为将要执行的不同时间。

我的'选择行为'转发器是这样的。

  • 选择行动(选择字段,显示行为cpt中的所有帖子)
  • 选择时间(选择字段,需要从“选择行为”更改的所选行为帖子中加载自定义元数据。)

我正在寻找的是,当用户选择一个动作时,我想要“选择时间”选择字段来加载用户在动作帖子中添加的时间。

所以,让我说我有行动A. Bodom的孩子。我在帖子中添加了四次。 21.00,22.00,23.00和24.00。

我也有法案B.社会扭曲。我在帖子中添加了三次。 15:00,16.00和17.00。

我想要的是在我的转发器中,当我选择了Bodom的儿童行为时,我希望选择转发器部分的时间根据我添加到童年的行为中的时间进行更新。

然后我在act repeater中添加另一个动作,我选择Social Distortion。然后,我希望将相应的时间选择更新为我添加到Social Distortion行为的时间。

我到目前为止尝试的是添加一些JS来执行选择更改,我不知道具体触发他各自的时间选择更新字段,因为转发器是动态设置的,我没有为该字段选择ID或密钥。

什么会很酷,但我不知道如何实现它,是从我的JS文件中触发acf/load_field/key=blabla函数,在那里我可以通过找到第一个选择后查找正确的键这引发了变革事件。然后在该负载字段操作被触发时执行一个函数,并在我的时间中加载正确的时间选择该相应的行为。

很抱歉,如果这有点令人困惑,我真的不知道如何描述这一点,但如果您想了解更多信息,请询问!

感谢。

1 个答案:

答案 0 :(得分:0)

我觉得在这种情况下,因为你需要的是动态的,你可以考虑使用Word中内置的Ajax来处理这个问题。所以,你可以做的是触发对该选择字段进行更改的ajax调用以执行类似这样的操作

jQuery('act_select_field').change(function(){
    jQuery.ajax({
        url: "/wp-admin/admin-ajax.php",
        type: 'POST',
        data: {
            action: 'get_related_act_times',
            act_id: //send through the act ID value,            
        },
        dataType: 'html',
        success: function (result) {
            //Use the html to populate your time select field
        },
        error: function (errorThrown) {
            console.log(errorThrown);
        }
    });
})

然后,在你的functions.php中,注册一个函数来处理这个调用,如下所示:

add_action('wp_ajax_get_related_act_times', 'get_act_times');
add_action('wp_ajax_nopriv_get_related_act_times', 'get_act_times');
/**
 * Get a list of events from Clear Bookings
 */
function get_act_times(){
    $act_id = $_POST['act_id'];
    $related_times = get_field('times_repeater_field',$act_id);
    foreach($realted_times as $time){
        //Build up your select html here
    }
    echo select_html
    die();
}

如果您想了解更多关于Admin Ajax方面的信息,Codex会提供大量信息:https://codex.wordpress.org/AJAX_in_Plugins。这应该有助于您开始动态填充第二个下拉菜单 - 尽管您需要调整代码以在您自己的系统上运行