我有以下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
在搜索范围内。
非常感谢任何帮助。
答案 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 );