@@ -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; )
Toto je přímá úprava základního souboru: /wp-includes/query.php Všimněte si, že znaménka plus ve výše uvedeném kódu označují nové řádky, které chcete přidat .
Poznámky autora:
Klient chtěl, abych nastavil vlastní pole s názvem „Guide Rank“, které jim umožnilo přiřadit číslo 1 - 20 pro seznam pruhů, o kterých zveřejňují příspěvky.
Po spuštění dotazu na příspěvky jsem zjistil, že meta_value bylo zacházeno jako s řetězcem a jako takové bylo pořadí řazení zmateno:
např. 1, 10, 2, 3 css-tricks.com C 7, 8, 9
Chcete-li, aby WordPress / MySQL používal „Natural Sort Order“, stačí použít +0 na název pole a bude se s ním zacházet jako s číslem (např. Meta_value + 0).
Aby existující chování nebylo přerušeno, právě jsem přidal nový typ 'meta_value_num'.
Můj řádek dotazu nyní vypadá takto:
$guide_posts = new WP_Query("cat=12&meta_key=guide_rank&orderby=meta_value_num&order=ASC&showposts=10");
Který vrací: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
To je pro zahrnutí do kmene WordPress - takže doufejme, že jakmile bude použito, nemělo by být nutné ručně upravovat soubor.