@@ -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; )
Това е директно редактиране на основния файл: /wp-includes/query.php Забележете, че знаците плюс в горния код показват нови редове за добавяне .
Бележки на автора:
Клиент искаше да настроя персонализирано поле, наречено “Guide Rank”, което им позволи да присвоят №1 - 20 за списък с ленти, за които публикуваха.
След стартиране на заявката за публикации установих, че meta_value се третира като низ и като такъв редът на сортиране се бърка:
напр. 1, 10, 2, 3css-tricks.com C 7, 8, 9
За да накарате WordPress / MySQL да използва „Естествен ред на сортиране“, просто трябва да приложите +0 към името на полето и то ще се третира като число (напр. Meta_value + 0).
За да не се прекъсва съществуващото поведение, току-що добавих новия тип 'meta_value_num'.
Моят ред за заявки сега изглежда така:
$guide_posts = new WP_Query("cat=12&meta_key=guide_rank&orderby=meta_value_num&order=ASC&showposts=10");
Което връща: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Това е за включване в магистралата на WordPress - така че се надяваме, че след като се приложи, не би трябвало да има нужда от ръчно редактиране на файла.