查询具有多个值的多个元键的Wordpress帖子

时间:2013-11-12 09:51:25

标签: php mysql sql wordpress wordpress-plugin

我在为我们的客户做的项目上遇到了WordPress查询问题。基本上我的问题是我想用指定的meta_keys从数据库中获取帖子。我想用元键'_price'和xx和yy之间的值来获取我的帖子(wpcompare)。到目前为止工作正常。现在我想为制造商,类别和标签添加过滤器。这些过滤器值都是多个,因此您可以选择多个制造商。例如佳能和尼康。因此,使用WP_MetaQuery,我可以过滤多个meta_keys和值,但我无法将查询与AND或OR组合。

让我举个例子,我的查询应该如何运作:

“给我发布post_type的所有帖子”wpcompare“,其中meta_value _price介于100到200美元之间,制造商(_hersteller)是Canon或Nikon OR Sony”。

我的头变得疯狂,所以请帮助我。

非常感谢您提前: - )

这是我的代码:

if(isset($_POST) AND !empty($_POST))
{
    $meta_query = array(
        'relation' => 'AND',
        array(
            'key' => '_price',
            'value' => array($_POST['p_from'], $_POST['p_to']),
            'type' => 'CHAR',
            'compare' => 'BETWEEN'
        ),

    );
}
else
{
    $meta_query = '';
}

$args = array(
    'post_type' => 'wpcompare',
    'post_status' => 'publish',   
    'paged' => $paged,
    'meta_query' => $meta_query,
    'posts_per_page' => ($per_page == false) ? 18 : $per_page,
    'ignore_sticky_posts'=> true
);

$temp = $wp_query;

$wp_query = null;
$wp_query = new WP_Query($args)

2 个答案:

答案 0 :(得分:2)

$args = array(
    'post_type' => 'posttypehere',
    'meta_query' => array(
       'relation' => 'OR',
        array(
              'key' => '_price',
              'value' => array($_POST['p_from'], $_POST['p_to']),
              'type' => 'CHAR',
              'compare' => 'BETWEEN'
              ), 
         array(
            'key' => 'somekey',
            'value' => array($_POST['p_from'], $_POST['p_to']),
            'type' => 'CHAR',
            'compare' => 'BETWEEN'
             ),
         array(
            'key' => 'anotherkey',
            'value' => array($_POST['p_from'], $_POST['p_to']),
            'type' => 'CHAR',
            'compare' => 'BETWEEN'
        ),

    )
);

$query = new WP_Query( $args );
if ( $query->have_posts() ) :
    while ($query->have_posts()) : $query->the_post();
             echo $post_id = get_the_ID();
    endwhile;
endif;

答案 1 :(得分:1)

$meta_query = array(
        'relation' => 'OR',
        array(
            'key' => '_price',
            'value' => array($_POST['p_from'], $_POST['p_to']),
            'type' => 'CHAR',
            'compare' => 'BETWEEN'
        ), 
        array(
            'key' => 'somekey',
            'value' => array($_POST['p_from'], $_POST['p_to']),
            'type' => 'CHAR',
            'compare' => 'BETWEEN'
        ),
         array(
            'key' => 'anotherkey',
            'value' => array($_POST['p_from'], $_POST['p_to']),
            'type' => 'CHAR',
            'compare' => 'BETWEEN'
        ),

    );