按“价格”自定义字段显示“产品”类型的帖子:
$query = new WP_Query(
array ( 'post_type' => 'product',
'orderby' => 'meta_value',
'meta_key' => 'price' )
);
如果还希望按'尺寸'排序,我应该使用哪些代码?
另一个例子,我需要对自定义字段进行多次排序:
显示“事件”类型的帖子,按“Start_Hour”排序,然后按“Start_Minute”排序。
答案 0 :(得分:7)
感谢Bainternet我找到了解决方案:
function orderbyreplace($orderby) {
return str_replace('menu_order', 'mt1.meta_value, mt2.meta_value', $orderby);
}
和...
$args = array(
'post_type'=>'Events',
'orderby' => 'menu_order',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'Start_Hour',
'value' => '',
'compare' => 'LIKE'
),
array(
'key' => 'Start_Minute',
'value' => '',
'compare' => 'LIKE'
)
)
);
add_filter('posts_orderby','orderbyreplace');
$loop = new WP_Query( $args );
remove_filter('posts_orderby','orderbyreplace');
答案 1 :(得分:2)
我认为这在Wordpress 3.7中略有改变。
我不得不改变
return str_replace('menu_order', 'mt2.meta_value, mt1.meta_value', $orderby);
到
return str_replace('wp_posts.menu_order', 'mt2.meta_value, mt1.meta_value', $orderby);
感谢您的初步解决方案! [编辑]
答案 2 :(得分:1)
以下是使用多个meta_key和orderby的示例,我相信它应该有效:
$params = array(
'post_type' => 'product',
'meta_query' => array(
array(
'key' => 'price',
'value' => '',
'compare' => 'LIKE'
),
array(
'key' => 'size',
'value' => '',
'compare' => 'LIKE'
)
),
'orderby' => 'price size',
'order' => 'ASC'
);
$query = new WP_Query;
$resulting_obj = $query->query($params);
您需要更多地使用meta_query项目,尤其是'值'参数。请仔细查看自定义字段参数'中的http://codex.wordpress.org/Class_Reference/WP_Query。部分。
答案 3 :(得分:-1)
如果您的自定义字段之一是meta_key而另一个是表的正常列,则不需要任何过滤器或挂钩来排序多个自定义字段,而不是在查询中使用这些参数/参数。
'meta_key' => 'KEY_NAME',
'orderby' => 'meta_value_num SECOND_COLUMN_NAME',
'order' => 'ASC' or 'order' => 'DESC'
此处meta_value_num
和SECOND_COLUMN_NAME
的顺序很重要,您可能会根据订单看到不同的结果。