Natürliche Sortierung mit Post meta_key - CSS-Tricks

Anonim

@@ -2033,6 +2033,7 @@

 if ( !empty($q('meta_key')) ) ( $allowed_keys() = $q('meta_key'); $allowed_keys() = 'meta_value'; + $allowed_keys() = 'meta_value_num'; ) $q('orderby') = urldecode($q('orderby')); $q('orderby') = addslashes_gpc($q('orderby'));

@@ -2056,6 +2057,9 @@

 case 'meta_value': $orderby = "$wpdb->postmeta.meta_value"; break; + case 'meta_value_num': + $orderby = "$wpdb->postmeta.meta_value+0"; + break; default: $orderby = "$wpdb->posts.post_" . $orderby; )

Dies ist eine direkte Bearbeitung einer Kerndatei: /wp-includes/query.php Beachten Sie, dass die Pluszeichen im obigen Code neue Zeilen zum Hinzufügen anzeigen .

Anmerkungen des Autors:

Ein Kunde wollte, dass ich ein benutzerdefiniertes Feld namens "Guide Rank" einrichte, mit dem er einer Liste von Bars, über die er Beiträge veröffentlicht, die Nummern 1 bis 20 zuweisen kann.

Nachdem ich die Posts-Abfrage ausgeführt hatte, stellte ich fest, dass der meta_value als Zeichenfolge behandelt wurde und als solche die Sortierreihenfolge durcheinander gebracht wurde:

z.B. 1, 10, 2, 3css-tricks.comC 7, 8, 9

Um WordPress / MySQL dazu zu bringen, "Natural Sort Order" zu verwenden, müssen Sie nur +0 auf den Feldnamen anwenden und er wird als Zahl behandelt (z. B. meta_value + 0).

Damit das bestehende Verhalten nicht unterbrochen wird, habe ich gerade den neuen Typ 'meta_value_num' hinzugefügt.

Meine Abfragezeile sieht jetzt so aus:

$guide_posts = new WP_Query("cat=12&meta_key=guide_rank&orderby=meta_value_num&order=ASC&showposts=10");

Was zurückgibt: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Dies kann in den WordPress-Trunk aufgenommen werden. Wenn es also einmal angewendet wird, sollte es hoffentlich nicht mehr erforderlich sein, die Datei manuell zu bearbeiten.