2012-10-01 17 views
6

Wyświetl posty z „produktem” typu zamówione przez niestandardowym polu „cena”:Jak sortować wiele wartości pól niestandardowych wordpress?

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

kodu, którego należy użyć, jeśli chcesz zamówić także przez „rozmiar”?

Innym przykładem na które muszę wielokrotnego rodzaju na polach niestandardowych:

Wyświetl posty z „zdarzenie” typu zamówionej przez „START_HOUR”, a następnie „Start_Minute”.

Odpowiedz

7

Dzięki Bainternet znalazłem rozwiązanie:

function orderbyreplace($orderby) { 
    return str_replace('menu_order', 'mt1.meta_value, mt2.meta_value', $orderby); 
} 

i ...

$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

wygląda na to, że to nie działa, ponieważ najpierw sprawdzana jest liczba znalezionych wierszy. 'SELECT SQL_CALC_FOUND_ROWS zmw_posts.ID Z' –

1

Oto przykład z użyciem więcej niż jednego meta_key i orderby że wierzę powinno działać:

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

musisz grać z pozycji meta_query nieco więcej, zwłaszcza parametr „wartość”. Proszę dobrze zapoznać się z http://codex.wordpress.org/Class_Reference/WP_Query w sekcji "Parametry niestandardowe pola".

+0

Ten działał dla mnie w WP 4.5.3 – KingRichard

2

myślę, że zmienił się nieznacznie w Wordpress 3.7.

musiałem zmienić

return str_replace('menu_order', 'mt2.meta_value, mt1.meta_value', $orderby); 

do

return str_replace('wp_posts.menu_order', 'mt2.meta_value, mt1.meta_value', $orderby); 

Dzięki za początkowym rozwiązanie! [Edytowany]

-1

Nie potrzebujesz żadnego filtra ani haków do sortowania wielu pól niestandardowych, jeśli twoje pole niestandardowe to meta_key, a inne jest normalną kolumną tabeli, użyj tych parametrów/argumentów w zapytaniu.

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

Oto kolejność meta_value_num i SECOND_COLUMN_NAME materii, można zobaczyć inny-2 wynik w oparciu o zlecenia.

+0

To będzie sortować według 'KEY_NAME'. Jedynym sposobem działania 'orderby' jest to, że' SECOND_COLUMN_NAME' nie jest polem niestandardowym, które nie odpowiada na te pytania. – Dylan