我正在尝试过滤我的帖子,只显示那些具有“模型”字段自定义值的帖子,同时按另一个名为“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
,则按价格排序,但会显示所有帖子,而不仅仅是模型。
答案 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);
}
?>