2012-10-01 6 views
6

anzeigen Beiträge mit ‚Produkt‘ Art von ‚Preis‘ benutzerdefinierte Feld bestellt:Wie sortiert man mehrere WordPress-eigene Feldwerte?

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

Welche Code sollte ich, wenn auch verwenden, indem Sie ‚Größe‘ bestellen möchten?

Ein weiteres Beispiel, auf dem ich brauche mehrere Sortier auf benutzerdefinierte Felder:

anzeigen Beiträge mit ‚Ereignis‘ Art von ‚START_HOUR‘ bestellt und dann durch ‚Start_Minute‘.

Antwort

7

Dank Bainternet fand ich die Lösung:

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

und ...

$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

es scheint, dass dies nicht funktioniert, weil zuerst die Anzahl Zeilen gefunden wird abgefragt. 'SELECT SQL_CALC_FOUND_ROWS zmw_posts.ID FROM' –

1

Hier ist ein Beispiel der Verwendung von mehr als einer meta_key und orderby dass ich glaube, funktionieren sollte:

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

Sie benötigen mit den meta_query Artikel ein bisschen mehr zu spielen, vor allem den ‚Wert‘ Parameter. Sehen Sie sich bitte http://codex.wordpress.org/Class_Reference/WP_Query im Abschnitt 'Benutzerdefinierte Feldparameter' an.

+0

Dieser arbeitete für mich in WP 4.5.3 – KingRichard

2

Ich denke, das 3.7 in Wordpress leicht verändert.

Ich hatte

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

in

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

Vielen Dank für die Anfangslösung zu ändern! [Bearbeitet]

-1

Sie benötigen keine Filter oder Hooks, um mehrere benutzerdefinierte Felder zu sortieren, wenn Ihr benutzerdefiniertes Feld meta_key ist und die andere normale Spalte der Tabelle ist, als diese Parameter/Argumente in Ihrer Abfrage zu verwenden.

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

Hier ist die Reihenfolge der meta_value_num und SECOND_COLUMN_NAME Sache, Sie können verschiedene-2 ​​Ergebnis in der Reihenfolge an sehen.

+0

Dies wird nur nach 'KEY_NAME' sortiert. Die einzige Möglichkeit, dass 'orderby' funktioniert, ist, wenn 'SECOND_COLUMN_NAME' kein benutzerdefiniertes Feld ist, das diese Fragen nicht beantworten kann. – Dylan