如何按两个自定义字段

时间:2015-05-14 07:43:08

标签: wordpress custom-post-type

这是我的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。

怎么做?

2 个答案:

答案 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中使用此功能,它会按自定义字段'价格'

订购您的记录