2013-08-06 127 views
1

我想先顯示與特定meta_key => cr_id相匹配的帖子,然後再訂購這些帖子'meta_key' => 'cr_list_price',然後顯示其他訂單也由'meta_key' => 'cr_list_price'訂購的其他帖子。WordPress查詢:ORDER BY CASE WHEN

這是我現在的代碼,它做我想要的一切,除了顯示cr_id = 4的帖子。

$args = array(
     'post_type' => 'properties', 
     'paged' => get_query_var('paged'), 
     'meta_query' => array(
      array(
       'key' => 'cr_list_price', 
       'value' => array($minPrice, $maxPrice), 
       'type' => 'numeric', 
       'compare' => 'BETWEEN' 
      ), 
      array(
       'key' => 'cr_prop_bed', 
       'value' => $beds, 
       'compare' => '>=' 
      ), 
     ), 
     'orderby' => 'meta_value_num', 
     'meta_key' => 'cr_list_price' 
    ); 

    $loop = new WP_Query($args); 

如果我是用生MySQL我會做這樣的事情在我的查詢ORDER BY CASE WHEN,但是我不知道我怎麼還是如果能與WordPress做到這一點。

回答

2

我想知道是否可以通過在那裏添加一個小擴展來爲查詢添加一個過濾器。我想,也許posts_orderby

功能

function filter_case($orderby = '') { 
    $orderby .= 'CASE WHEN [some conditions]'; 
    return $orderby; 
} 

查詢之前

add_filter('posts_orderby', 'filter_case'); 

$wp_query = new WP_Query($args); 

remove_filter('posts_orderby', 'filter_case'); 

我不能gaurantee這將工作第一次,但如果你認爲這是值得的,可以工作在追求? WP_Query過濾器列表是here

+0

我有[相同的問題](https://wordpress.stackexchange.com/questions/177650/sort-search-with-posts-orderby/177653#177653),這個答案幫助我弄明白了 – honk31