带有可变数量参数的wp_query

时间:2014-04-17 22:49:09

标签: wordpress wp-query

我想为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);

所以你可以看到我尝试了一些不同的方法,但没有一种方法可行。有人可以帮忙吗?

1 个答案:

答案 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'
        )
    )
);