使用两个选择字段过滤acf关系字段(ACF)

时间:2017-10-12 19:01:02

标签: wordpress relationship advanced-custom-fields

我的问题与此类似,但我想更进一步。

Update select field in repeater based upon the choice of other select field (ACF)

我的管理区域和关系字段中有两个acf选择字段。两个选择字段分别加载了自定义分类。第一个被称为" Pool"第二个是"月"。池可以是这些值中的一个" A,B或C"。月份字段只是一年中的月份。关系字段显示自定义帖子类型的所有帖子。

当我选择一个游泳池时,我会看到过滤关系中的结果很棒。当我选择一个月时,我可以看到它们被进一步过滤。所有好消息。我点击帖子上的更新按钮,我的值就被保存了。

我有两个问题。

首先,当我回到页面时,我的过滤器尚未激活。我正在使用wp_ajax调用来更新关系字段。

其次,当我回来编辑同一篇文章时,我可以看到关系字段左侧的所有帖子以及我在右侧选择的帖子。当我与我的游泳池和月份过滤器进行交互时,关系字段左侧的所有结果都会发生变化,除了问题是我选择并出现在右侧的问题现在已经再次出现在左侧并且他们没有被禁用。

最终,我想要做的是当我编辑页面时,我希望我的过滤器已经处于活动状态。这意味着关系字段应该使用我保存之前已经选择的选择进行过滤。

如果它们出现在右侧,我也希望在左侧选择禁用的值。

我需要做些什么来完成这项工作?

admin_site.js     jQuery(document).ready(function(){

jQuery('.tips-pool select, .tips-month select').change(function(){

    var tipsPoolSelected = jQuery('.tips-pool select').val();
    var tipsMonthSelected = jQuery('.tips-month select').val();

    console.log("tipsPoolSelected: " + tipsPoolSelected);
    console.log("tipsMonthSelected: " + tipsMonthSelected);    

    jQuery.ajax({
        url: "/wp-admin/admin-ajax.php",
        type: 'POST',
        data: {
            action: 'filter_by_tips',
            tips_pool_selected: tipsPoolSelected,
            tips_month_selected: tipsMonthSelected,
        },
        dataType: 'html',
        success: function (result) {
            //Use the html to populate your time select field
            jQuery('.tips-relationship .selection .choices ul.acf-bl.list').html( result );
            console.log("result: " + result);
        },
        error: function (errorThrown) {
            console.log(errorThrown);
        }
    });

});

});

的functions.php

// Function to hook into from the select
add_action('wp_ajax_filter_by_tips', 'filter_by_tips');
add_action('wp_ajax_nopriv_filter_by_tips', 'filter_by_tips');

/**
 * Get the tips filter by pool cat id
 */
function filter_by_tips(){
  global $wpdb;

  $html_select = NULL;

  // pool_cat_slug
  if($_POST['tips_pool_selected']){
    $pool_cat_slug = $_POST['tips_pool_selected'];
  }

  // month_cat_value
  if($_POST['tips_month_selected']){                        
     $month_cat_slug = strtolower($_POST['tips_month_selected']);
  }

                $args = array(
                    'post_type' => 'daily-marriage-tips',
                    'tax_query' => array(
                        'relation' => 'AND',
                        array(
                            'taxonomy' => 'cat_tips',
                            'field'    => 'slug',
                            'terms'    => $pool_cat_slug,
                        ),
                        array(
                            'taxonomy' => 'cat_months',
                            'field'    => 'slug',
                            'terms'    => $month_cat_slug,
                        ),
                    ),
                );
    $query = new WP_Query( $args );
    if( $query->have_posts() ):
      while ($query->have_posts()) : $query->the_post();
        $post_id = get_the_ID();
        $post_title = get_the_title();

        $html_select = '<li><span class="acf-rel-item" data-id="'.$post_id.'">'.$post_title.'</li>';

        endwhile;
    endif;

    if($html_select){
      echo $html_select;
    }   

    unset($pool_cat_slug);
    unset($tips_month_selected_array);

    exit;
}

0 个答案:

没有答案