WP_Query,使用AND和OR

时间:2016-01-27 11:43:34

标签: php wordpress wp-query

我有以下PHP: -

    $args = array(
        'posts_per_page'=> -1,
        'post_type'     => 'jobs',
        'order'             => 'ASC',
        's' => $search_field,
        'meta_query'    => array(
            'relation' => 'AND',
            array(
                'key'       => 'job_salary_from',
                'value'     => $job_salary_from,
                'compare'   => '>=',
            ),
            array(
                'key'       => 'job_salary_from',
                'value'     => $job_salary_to,
                'compare'   => '<=',
            ),
            array(
            'relation' => 'OR',
            array(
                'key'       => 'job_salary_to',
                'value'     => $job_salary_from,
                'compare'   => '>=',
            ),
            array(
                'key'       => 'job_salary_to',
                'value'     => $job_salary_to, 
                'compare'   => '<=',
            ),
        ))              
    );

让我们说有一份工作从19000到22000被称为'ABC',所以 job_salary_from = 19000 和job_salary_to = 22000。

现在假设我搜索一个介于10000和19000之间的作业,因此$job_salary_from = 10000且$job_salary_to = 19999。

当我进行正确的搜索时,会显示此信息。但是,如果我搜索的作业介于20000和29999之间,那么$job_salary_from = 19999且$job_salary_to = 29999则不会显示任何内容。

作业'ABC'应该出现在哪里,因为$job_salary_to在搜索范围内。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我认为meta_query语法不太正确。试试这个:

$args = array(
    'posts_per_page'=> -1,
    'post_type'     => 'jobs',
    'order'             => 'ASC',
    's' => $search_field,
    'meta_query'    => array(
        'relation' => 'OR',

        array(
            'relation' => 'AND',
            array(
                'key'       => 'job_salary_to',
                'value'     => $job_salary_from,
                'type'    => 'numeric', //for each case
                'compare'   => '>=',
            ),
            array(
                'key'       => 'job_salary_to',
                'value'     => $job_salary_to,
                'type'    => 'numeric',
                'compare'   => '<=',
            ),
        ),

        array(
            'relation' => 'AND',
            array(
                'key'       => 'job_salary_from',
                'value'     => $job_salary_from,
                'type'    => 'numeric',
                'compare'   => '>=',
            ),
            array(
                'key'       => 'job_salary_from',
                'value'     => $job_salary_to,
                'type'    => 'numeric',
                'compare'   => '<=',
            ),
        )
    )
);

此外,您可以尝试使用BETWEEN,即使我不确定这是包含还是独占比较。

答案 1 :(得分:1)

这是因为在一个范围之间获取结果有不同的功能。

尝试以下示例来获取范围

之间的结果
$args = array(
    'post_type'  => 'product',
    'meta_query' => array(
        array(
            'key'     => 'color',
            'value'   => 'blue',
            'compare' => 'NOT LIKE',
        ),
        array(
            'key' => 'price',
            'value'   => array( 20, 100 ),
            'type'    => 'numeric',
            'compare' => 'BETWEEN',
        ),
    ),
);
$query = new WP_Query( $args );

此处有更多资源https://codex.wordpress.org/Class_Reference/WP_Query