按两个自定义字段过滤query_posts?

时间:2010-10-20 15:36:47

标签: php wordpress loops field

我正在尝试过滤我的帖子,只显示那些具有“模型”字段自定义值的帖子,同时按另一个名为“Price”的自定义字段对帖子进行排序。

这是我正在使用的功能(不工作):

<?php 
global $query_string;
query_posts( $query_string . "&meta_value=Model&orderby=meta_value&meta_key=Price&order=ASC"); 
?>

此功能仅显示模型,但不按价格对帖子进行排序。如果我在&meta_value=Model之后添加order=ASC,则按价格排序,但会显示所有帖子,而不仅仅是模型。

3 个答案:

答案 0 :(得分:7)

你看过http://codex.wordpress.org/Class_Reference/WP_Query

吗?

特别是本节:

多个自定义字段处理:

显示多个自定义字段中的帖子:

$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 );

答案 1 :(得分:1)

你尝试过数组吗?

$args = array(
  'meta_value' => array('Model','Price')
    );
    query_posts($args);

答案 2 :(得分:0)

我知道这是一个老问题,但我今天需要答案而无法在任何地方找到答案。我找到了问题,然后创建了一个答案(如下所示):

<?php
$sql = "
    SELECT ID, meta1.meta_value, meta2.meta_value from $wpdb->posts p
        JOIN $wpdb->postmeta meta1 ON meta1.post_id = p.ID
        JOIN $wpdb->postmeta meta2 ON meta2.post_id = p.ID
    WHERE p.post_status = 'publish'
    AND p.post_type = 'post'
    AND meta1.meta_key = 'Model'
    AND meta2.meta_key = 'Price'
    ORDER BY meta2.meta_value DESC
";
$posts_with_meta = $wpdb->get_col($sql);
$my_query = new WP_Query();
foreach ($posts_with_meta as $p) {
    $post = get_post(intval($p));
    setup_postdata($post);
    print_r($post);
}
?>