2012-10-01 46 views
6

與「產品」類型顯示文章由「價格」自定義字段排序:如何排序多個wordpress自定義字段值?

$query = new WP_Query( 
         array ('post_type' => 'product', 
           'orderby' => 'meta_value', 
           'meta_key' => 'price') 
        ); 

我應該使用哪種代碼,如果還希望通過「大小」命令?

又如上,我需要的自定義字段多個排序:

用「START_HOUR」有序'事件類型顯示文章,然後通過「START_MINUTE」。

回答

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'); 
+0

爲我工作,似乎這不起作用,因爲首先查詢找到的數字行。 'SELECT SQL_CALC_FOUND_ROWS zmw_posts.ID FROM' –

1

下面是使用一個以上的meta_key和排序依據,我認爲應該工作的一個例子:

$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

+0

這一個在WP 4.5.3 – KingRichard

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); 

感謝最初的解決方案! [編輯]

-1

如果您的自定義字段是meta_key,而另一個字段是普通列的表,則不需要任何篩選器或掛鉤來排序多個自定義字段,而不是在查詢中使用這些參數/參數。

'meta_key' => 'KEY_NAME', 
'orderby' => 'meta_value_num SECOND_COLUMN_NAME', 
'order' => 'ASC' or 'order' => 'DESC' 

這裏的meta_value_numSECOND_COLUMN_NAME事情的順序,您可能會看到基於該順序不同-2的結果。

+0

這將僅按'KEY_NAME'進行排序。如果SECOND_COLUMN_NAME不是一個自定義字段,那麼'orderby'將起作用的唯一方法是無法回答這個問題。 – Dylan

相關問題