Wp_query Auftrag von mehreren benutzerdefinierten Feldern?

Ich lerne WP_query und bin kürzlich auf ein Problem gestoßen.

Ich muss eine Abfrage durchführen, wo ich zuerst durch einen oder mehrere benutzerdefinierte Felder, die dank meta_query funktioniert super filtern.

Allerdings muss ich auch mehrere benutzerdefinierte Felder bestellen.

(Wie in SQL können Sie “ORDER BY Feld ASC, Feld2 DESC” schreiben)

Das habe ich bisher:

$args=array( 'post_type' => 'personer', 'meta_query' => array( array( 'key' => 'p_seller', 'value' => 'Y', 'compare' => '=' ) ), 'meta_key' => 'p_region', 'orderby' => 'meta_value', 'order' => 'ASC', 'post_status' => 'publish', 'posts_per_page' => 999, 'caller_get_posts'=> 1 ); 

Es gibt Zeilen zurück, in denen p_seller auf Y und die Reihenfolge nach p_region festgelegt ist. Ich möchte auch eine zweite Reihenfolge hinzufügen, indem Sie sie nach p_lastname nach Region sortieren. Oder noch besser – p_region, p_lastname, p_firstname. Alles aufsteigend, aber ich würde gerne wissen, wie man ASC und DESC auch kombiniert 🙂

Ich habe etwas gegoogelt, aber die meisten Leute scheinen über mehrere Felder zum Filtern zu schreiben, was ich bekommen habe. Oder sie machen Platz in benutzerdefinierten SQL-Abfragen, von denen ich hoffe, dass ich ohne sie auskommen kann? 🙂

Solutions Collecting From Web of "Wp_query Auftrag von mehreren benutzerdefinierten Feldern?"

 $qry_args = array( 'post_status' => 'publish', 'post_type' => 'event', // Post type 'posts_per_page' => -1, // ALL posts 'orderby' => 'meta_value', 'meta_key' => 'year', 'order' => 'DESC' ); add_filter( 'posts_orderby', 'filter_query' ); $all_posts = new WP_Query( $qry_args ); remove_filter( 'posts_orderby', 'filter_query' ); function filter_query( $query ) { $query .= ', post_modified DESC'; return $query; } 

Hier ist ein Beispiel, das funktioniert. Der obige Code ordert alle Posts vom Typ event: first DESCENDENT nach Jahr, second DESCENDENT nach Änderungsdatum für Beiträge aus demselben Jahr.

ohne die zweite Bestellung würden sie ASCENDENT bestellt bleiben, wenn sie das gleiche Jahr hätten.

ps year ist ein benutzerdefiniertes Feld, das von mir zu Beiträgen vom Typ “Event” hinzugefügt wurde.

Ich bin mir sicher, dass es elegantere Lösungen gibt, aber das ist es, was ich entwickelt habe und es funktioniert jetzt …

 global $wpdb; $querystr = " SELECT wposts.* FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta, $wpdb->postmeta wpostmeta2, $wpdb->postmeta wpostmeta3 WHERE wposts.ID = wpostmeta.post_id AND wposts.ID = wpostmeta2.post_id AND wposts.ID = wpostmeta3.post_id AND wpostmeta.meta_key = 'p_seller' AND wpostmeta2.meta_key = 'p_role' AND wpostmeta3.meta_key = 'p_firstname' AND wpostmeta.meta_value = 'N' AND wposts.post_type = 'personer' AND wposts.post_status = 'publish' ORDER BY wpostmeta2.meta_value ASC, wpostmeta3.meta_value ASC "; $pageposts = $wpdb->get_results($querystr); if ($pageposts){ foreach ($pageposts as $post){ setup_postdata($post); // the_title() or whatever works here.. } } 

Sie sollten die Abfrage über den posts_orderby Filter posts_orderby

In deiner Vorlage

 add_filter('posts_orderby', 'custom_orderby'); $query= new WP_Query($args); remove_filter('posts_orderby', 'custom_orderby'); 

In deiner function.php

 function custom_orderby($orderby) { return "ORDER BY field ASC, field2 DESC"; }