Естествено сортиране с помощта на публикация meta_key - CSS-трикове

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; )

Това е директно редактиране на основния файл: /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 - така че се надяваме, че след като се приложи, не би трябвало да има нужда от ръчно редактиране на файла.