我想为wp_query构建一组动态参数但是在这方面遇到了实际问题。采用以下示例代码(确实有效)......
$args = array(
'numberposts' => -1,
'posts_per_page' => -1,
'post_type' => 'skills',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'years',
'value' => 'Primary',
'compare' => 'LIKE'
),
array(
'key' => 'years',
'value' => 'Secondary',
'compare' => 'LIKE'
)
)
);
// get results
$the_query = new WP_Query( $args );
这个想法是,根据表单中用户输入的结果,我的meta_query值中的子句数量会改变。在上面的代码中有两个选项,但可能取决于输入有3或另一个时间5.
我尝试在$ args外部编译这些内部数组元素。在下面的代码中假设$ inputArray是字符串元素的单维数组。测试看起来像:
$inputArray=array();
if (is_array($yearsArray)){
foreach( $yearsArray as $year ) {
$inputArray[]=array('key' => 'years','value' => $year,'compare' => 'LIKE');
}
}
// args
$args = array(
'numberposts' => -1,
'posts_per_page' => -1,
'post_type' => 'skills',
'meta_query' => array(
'relation' => 'OR',
$inputArray
)
);
但是查询只是运行,好像没有应用meta_query查询。
我也尝试使用函数wp_parse_args来尝试合并多个元查询,但是我似乎覆盖了这个值,只使用了最后一个。这看起来像这样:
// args
$args = array(
'numberposts' => -1,
'posts_per_page' => -1,
'post_type' => 'skills'
);
$args2 = array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'years',
'value' => 'Secondary',
'compare' => 'LIKE'
)
)
);
$args3 = array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'years',
'value' => 'Primary',
'compare' => 'LIKE'
)
)
);
$args=wp_parse_args($args,$args2,$args3);
所以你可以看到我尝试了一些不同的方法,但没有一种方法可行。有人可以帮忙吗?
答案 0 :(得分:0)
我通过发现你可以使用IN作为比较子句来解决这个问题。 $ yearsArray只是一个字符串值的单维数组。
$args = array(
'numberposts' => -1,
'posts_per_page' => -1,
'post_type' => 'skills',
'meta_query' => array(
array(
'key' => 'years',
'value' => $yearsArray,
'compare' => 'IN'
)
)
);