这是我的meta查询,按属性类型和卧室过滤属性,按DESC顺序按价格排序。
$properties = array(
'post_type' => 'soto_property',
'paged'=>$paged,
'posts_per_page' => 6,
'orderby' => 'meta_value_num',
'meta_key' => 'price',
);
/*check Price range */
if (!empty($_GET['price_range'])) {
$lowestPrice=get_post_meta($_GET['price_range'],"lowest_price",true);
$maximumPrice=get_post_meta($_GET['price_range'],"maximum_price",true);
$properties['meta_query'][] = array(
'key' => 'price',
'value' => array($lowestPrice, $maximumPrice),
'type' => 'numeric',
'compare' => 'BETWEEN',
);
}
else
{
$properties['meta_query'][] = array(
'key' => 'price',
'compare' => 'EXISTS'
);
}
/*check bedrooms range */
if (!empty($_GET['bedrooms'])) {
$beds_value=get_post_meta($_GET['bedrooms'],"beds_value",true);
if($beds_value)
{
$properties['meta_query'][] = array(
'key' => 'dorm_room',
'value' => $beds_value,
'type' => 'numeric',
'compare' => '>='
);
}
}
function orderbyreplace($orderby ) {
global $wpdb;
return ('mt1.meta_value DESC, mt2.meta_value ASC');
}
add_filter('posts_orderby','orderbyreplace');
query_posts($properties);
remove_filter('posts_orderby','orderbyreplace');
它工作正常,但现在我想通过卧室订购物业。
例如,如果将卧室值选为“2”,则过滤掉所有卧室值大于2的属性。
我想订购属性,例如首先按价格顺序(DESC)过滤掉卧室值2的所有属性,然后是所有属性 卧室价值3按价格顺序(DESC)过滤,然后同样适用于卧室价值4,5和6。
怎么做?
答案 0 :(得分:1)
据我所知,WP_Query无法使用meta_values进行多次排序。
但是,您可以使用posts_orderby过滤器和here it's example
答案 1 :(得分:0)
function my_pre_get_posts( $query ) {
// do not modify queries in the admin
if( is_admin() ) {
return $query;
}
// only modify queries for 'price' post type
if( isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'property' ) {
$price =get_post_meta($post_id, 'price', true);
if($price){
$query->set('orderby', 'meta_value_num');
$query->set('meta_key', 'price');
$query->set('order', 'DESC');
}
else
{
$query->set('orderby', 'meta_value_num');
$query->set('meta_key', 'bed');
$query->set('order', 'DESC');
}
}
// return
return $query;
}
add_action('pre_get_posts', 'my_pre_get_posts');
您可以在您的functions.php中使用此功能,它会按自定义字段'价格'
订购您的记录