使用高级自定义字段进行过滤,Wordpress

Filter with Advansed custom fields, Wordpress

我的网站有过滤器: 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?

我将过滤器更改为:

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);
}

它似乎有效:)