2015-05-14 76 views
0

这里是我的元查询,以按照DESC顺序按价格排列的property_type和卧室过滤属性。如何通过自定义帖子类型按两个自定义字段排序

$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。

我想订购像卧室第一所有属性的属性值2在价格顺序过滤(DESC )然后所有属性 卧室值3按价格顺序过滤(DESC),然后类似卧室值为4,5和6.

如何做到这一点?

+0

您可以使用“pre_get_posts”过滤器中的functions.php –

+0

请你能告诉我如何在functions.php中使用'pre_get_posts'滤波器的阶数呢? –

回答

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使用它会自定义字段“价格”

+0

我的自定义帖子类型是“财产”而不是“价格”。价格和床是“财产”自定义帖子类型中的两个自定义字段,我想订购由两个自定义字段说价格和床位的自定义帖子。 –

+0

从自定义字段使用获取帖子元,然后比较,并根据此设置元键价格或床 –

+0

类似,你可以做到这一点卧室get_post_meta(post_id,'卧室',真)然后使用它,如果磨碎,然后2然后使用这是为了订购记录 –

相关问题