@@ -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; )
Dit is een directe bewerking van een kernbestand: /wp-include/query.php Merk op dat de plustekens in de bovenstaande code aangeven dat er nieuwe regels moeten worden toegevoegd .
Opmerkingen van de auteur:
Een klant wilde dat ik een aangepast veld instelde met de naam "Guide Rank", waarmee ze # 1 - 20 konden toewijzen aan een lijst met Bars waarover ze posten.
Na het uitvoeren van de posts-query ontdekte ik dat de meta_value werd behandeld als een string en als zodanig werd de sorteervolgorde door elkaar gehaald:
bijv. 1, 10, 2, 3css-tricks.com C 7, 8, 9
Om WordPress / MySQL de "natuurlijke sorteervolgorde" te laten gebruiken, hoeft u alleen maar +0 toe te passen op de veldnaam en het zal worden behandeld als een getal (bijv. Meta_value + 0).
Zodat bestaand gedrag niet wordt onderbroken, heb ik zojuist het nieuwe type 'meta_value_num' toegevoegd.
Mijn vraagregel ziet er nu uit als:
$guide_posts = new WP_Query("cat=12&meta_key=guide_rank&orderby=meta_value_num&order=ASC&showposts=10");
Welke retourneert: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Dit moet worden opgenomen in de WordPress-trunk - dus hopelijk hoeft het bestand niet handmatig te worden bewerkt als het eenmaal is toegepast.