【问题标题】:Filter with Advansed custom fields, Wordpress使用高级自定义字段过滤,Wordpress
【发布时间】:2018-09-02 20:57:07
【问题描述】:

我的网站中有过滤器: My filter form

过滤算法是: Filtering algorithm

该算法的 PHP 代码:

$GLOBALS['my_query_filters'] = array( 
    'field_1'   => 'work',
    'field_2'   => 'visa'
);

add_action('pre_get_posts', 'my_pre_get_posts', 10, 1);

function my_pre_get_posts( $query ) {
    if(is_admin()) return;

    if(!$query->is_main_query()) return;

    $meta_query = $query->get('meta_query');
    $tax_query  = $query->get('tax_query');
    $k = 0;

    foreach($GLOBALS['my_query_filters'] as $key => $name) {
        if(empty($_GET[$name])) continue;

        $value = explode(',', $_GET[$name]);

        foreach($value as $item) {
            $meta_query[$k] = array(
                'key'     => $name,
                'value'   => $item,
                'type'    => 'CHAR',
                'compare' => 'LIKE'
            );

            $k++;
        }
    } 

    if($_GET['cat']) {
        $tax_query[] = array(
            array(
                'taxonomy' => 'category',
                'field'    => 'id',
                'terms'    => $_GET['cat'],
                'operator' => 'IN'
            )
        );
        $query->set('tax_query', $tax_query);
    }

    $query->set('meta_query', $meta_query);
}

但我需要将过滤算法更改为: New filtering algorithm

我不太了解 WP_Query()。你能帮我编辑 $meta_query 吗?

【问题讨论】:

    标签: wordpress filter filtering advanced-custom-fields


    【解决方案1】:

    我将过滤器更改为:

    function my_pre_get_posts( $query ) {
        if(is_admin()) return;
    
        if(!$query->is_main_query()) return;
    
        $meta_query = $query->get('meta_query');
        $tax_query  = $query->get('tax_query');
    
        foreach($GLOBALS['my_query_filters'] as $key => $name) {
            if(empty($_GET[$name])) continue;
    
            $meta_query['relation'] = 'AND';
            $meta_query_inner['relation'] = 'OR';
    
            $value = explode(',', $_GET[$name]);
            $k = 0;
            foreach($value as $item) {
                $meta_query_inner[$k] = array(
                    'key'     => $name,
                    'value'   => $item,
                    'type'    => 'CHAR',
                    'compare' => 'LIKE'
                );
    
                $k++;
            }
            $meta_query[] = $meta_query_inner;
        } 
    
        if($_GET['cat']) {
            $tax_query[] = array(
                array(
                    'taxonomy' => 'category',
                    'field'    => 'id',
                    'terms'    => $_GET['cat'],
                    'operator' => 'IN'
                )
            );
            $query->set('tax_query', $tax_query);
        }
    
        $query->set('meta_query', $meta_query);
    }
    

    它似乎工作:)

    【讨论】:

      猜你喜欢
      • 2016-06-30
      • 2018-01-21
      • 2016-12-18
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 2012-08-10
      • 2015-01-21
      相关资源
      最近更新 更多