【问题标题】:wp_query with a variable quantity of argumentswp_query 具有可变数量的参数
【发布时间】:2014-06-02 09:49:47
【问题描述】:

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

如您所见,我尝试了几种不同的方法,但都没有奏效。有人可以帮忙吗?

【问题讨论】:

    标签: wordpress


    【解决方案1】:

    我发现您可以将 IN 用作比较子句,从而解决了这个问题。 $yearsArray 只是一个字符串值的一维数组。

    $args = array(
        'numberposts' => -1,
        'posts_per_page' => -1,
        'post_type' => 'skills',
        'meta_query' => array(
            array(
                'key' => 'years',
                'value' => $yearsArray,
                'compare' => 'IN'
            )
        )
    );
    

    【讨论】:

      猜你喜欢
      • 2018-07-20
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多