WP_Query, benutzerdefinierte Sortierung und benutzerdefinierter Filter

Ist es möglich, mit WP_Query eine gefilterte Liste von Elementen basierend auf den folgenden Kriterien zurückzuliefern? Ich scheine zu kämpfen, da es zahlreiche Abfragen gegen benutzerdefinierte Felder gibt.

Select all posts that are of type business_club (post_type) Where the post has a zone of 'Asia' (meta_value) Order by country ASC (meta_value) then by town ASC (meta_value) then by title (wp value) 

Jede Hilfe wird sehr geschätzt.

Solutions Collecting From Web of "WP_Query, benutzerdefinierte Sortierung und benutzerdefinierter Filter"

Hast du so etwas versucht?

 $loop = new WP_Query( array( 'post_type' => 'business_club', 'meta_value' => 'United Kingdom', 'order' => 'ASC', 'orderby' => 'meta_value', 'meta_key' => 'zone' ) ); while ( $loop->have_posts() ) : $loop->the_post(); 

Ich weiß noch nicht, ob du die Bestellung dann durch Stadt und Titel machen kannst .

Wenn alle Ergebnisse die gleiche Zone haben, warum möchten Sie nach Zonen sortieren?

Soweit ich weiß, können Sie nicht zwei Meta-Schlüssel in eine einzelne Abfrage einschließen. Sie müssen also die Abfrage schreiben, um die nach Titel sortierten Ergebnisse zurückzugeben, sie in einem Array zu speichern und dann das Array in die von Ihnen benötigte Reihenfolge mit PHP zurückzusetzen.

Der Weg dahin war, eine benutzerdefinierte Abfrage zu erstellen. Weitere Informationen hierzu finden Sie im WordPress-Codex unter http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query .

Mein endgültiger Code sah folgendermaßen aus

 < ?php $row = 0; $zone = $_GET['zone']; if (!$zone) $zone = "United Kingdom"; ?>  < ?php $query = " SELECT posts.* FROM $wpdb->posts posts INNER JOIN $wpdb->postmeta meta1 ON posts.ID = meta1.post_ID INNER JOIN $wpdb->postmeta meta2 ON posts.ID = meta2.post_ID INNER JOIN $wpdb->postmeta meta3 ON posts.ID = meta3.post_ID WHERE posts.post_type = 'club' AND posts.post_status = 'publish' AND meta1.meta_key = '_club-zone' AND meta1.meta_value = '$zone' AND meta2.meta_key = '_club-country' AND meta3.meta_key = '_club-town' ORDER BY meta2.meta_value, meta3.meta_value, posts.post_title"; $posts = $wpdb->get_results($query, object); if ($posts) foreach($posts as $post) { global $post; setup_postdata($post); echo ''; echo ''; echo ''; echo ''; echo ''; $row++; } ?> 
Country Town Club
' . get_post_meta(get_the_ID(), '_club-country', true) . '' . get_post_meta(get_the_ID(), '_club-town', true) . '' . get_the_title() . '