WordPress Orderby Numerischer Wert funktioniert nicht

Ich versuche, alle Produkte aus dem WPSC-Produktposttyp zu erhalten und sie dann von einem benutzerdefinierten Metafeld namens release_date_year anzuzeigen. Es scheint jedoch nicht zu sein, meine Posts mit diesem benutzerdefinierten Metawert zu sortieren.

Ich habe unzählige Blog-Posts, Support-Beiträge zu den WordPress-Foren und viele Fragen und Antworten zu WordPress Answers gelesen. Ich konnte jedoch keine Lösung für meine Probleme finden.

Hier ist der Code, den ich verwende, um die Produkte zu erhalten und sie dann von einem benutzerdefinierten Meta-Feld zu bestellen. Ignoriere das Argument each_connected, wie es für das Plugin Posts to Posts von Scribu ist. Eine kurze Anmerkung: Ich habe auch versucht, den each_connected Teil zu entfernen, um zu sehen, ob es das Problem behoben hat, aber wie ich vermutete, änderte es nichts.

Es scheint, als ob der folgende Code die Produkte in Ordnung bringt, das ist nicht das Problem. Das Problem scheint zu sein, dass sie nach dem Veröffentlichungsdatum geordnet sind und nicht nach dem benutzerdefinierten Meta-Feldwert, der ein numerischer Wert ist.

$products = new WP_Query(array( 'post_type' => 'wpsc-product', 'nopaging' => true, 'meta_key' => 'release_date_year', 'each_connected' => array( 'post_type' => 'artists', 'nopaging' => true, ), 'suppress_filters' => false, 'orderby' => 'meta_value_num', 'order' => 'asc', )); 

Ich habe dann untersucht, welche Abfragen ausgeführt wurden, und Folgendes ist das Ergebnis:

 SELECT wp_posts.* FROM wp_posts INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) WHERE 1=1 AND wp_posts.post_type = 'wpsc-product' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') AND wp_postmeta.meta_key = 'release_date_year' GROUP BY wp_posts.ID ORDER BY wp_posts.menu_order, wp_posts.post_date DESC 

Jetzt ist es nur ich oder sollte der ‘ORDER BY’ Teil meiner Anfrage wp_postmeta.meta_key drin haben? Weil es für mich aussieht, sortiert es nach der Reihenfolge der Menüs und dem Postdatum absteigend. Die andere seltsame Sache ist, dass ich auch Beiträge sehe, die absteigend statt aufsteigend angeordnet sind.

Wie ich schon sagte, habe ich auch versucht, meta_query in meiner WP_Query-Abfrage zu verwenden, da ich WordPress 3.1 mit dem folgenden Code verwende und Posts immer noch nach post_date bestellte:

 $products = new WP_Query(array( 'post_type' => 'wpsc-product', 'nopaging' => true, 'meta_key' => 'release_date_year', 'meta_query' => array(array( 'key' => 'release_date_year', 'type' => 'NUMERIC' )), 'each_connected' => array( 'post_type' => 'artists', 'nopaging' => true, ), 'suppress_filters' => false, 'orderby' => 'meta_value', 'order' => 'desc', )); 

Habe ich meine WP_Query-statement falsch formatiert oder spielt hier etwas anderes eine Rolle? Ich habe auch bestätigt, dass es Daten in der wp_postmeta Tabelle gibt und dort sind Werte für jedes Produkt dort.


Aktualisierung und Lösung

Nach einigem Herumalbern fand ich den Schuldigen. Ein Plugin namens “Post Types Order”, das meine WordPress-Abfragen modifiziert und somit das Argument suppress_filters komplett ignoriert, ua orderby.

Siehe meine Antwort unten.

Solutions Collecting From Web of "WordPress Orderby Numerischer Wert funktioniert nicht"

Das Plugin ” Post Types Order ” war der Schuldige. Wie Scribu bereits erwähnt hat, filtert das Plugin die Raw SQL Abfrage, die es nicht machen sollte. Daher wurde das Argument ‘ suppress_filters ‘ nicht angehalten , um die Abfrage zu modifizieren und das Argument ‘ orderby ‘ wurde komplett ignoriert.

Wie dieses Verhalten gestoppt werden kann, bin ich nicht sicher. Ich habe mein Problem getriggers, indem ich das Plugin deaktiviert habe, da es nicht einmal benutzt wurde. Sie können jedoch die Reihenfolge Ihrer benutzerdefinierten Post-Typ-Menüs in Ihrem register_post_types-Code ändern , indem Sie das Argument ‘ menu_position ‘ verwenden, das entscheidet, wo das Menü platziert wird.

Dokumentation zur Bestellung Ihrer Post-Typen im WordPress-Admin-Menü finden Sie hier in der offiziellen WordPress-Dokumentation.

Die Lektion, die Sie hier gelernt haben, ist, dass Sie immer davon ausgehen sollten, dass ein Plugin etwas kaputt gemacht hat, besonders wenn Sie Code aus der offiziellen Dokumentation verwenden, die funktioniert.

Es sieht so aus, als ob Ihr Parameter ‘orderby’ vollständig ignoriert wird.

Setzen Sie 'suppress_filters' => true , um sicherzustellen, dass keine Interferenzen auftreten.