Naturalne sortowanie za pomocą meta_klucza postu - 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; )

To jest bezpośrednia edycja pliku podstawowego: /wp-includes/query.php Zwróć uwagę, że znaki plus w powyższym kodzie wskazują nowe linie do dodania .

Uwagi autora:

Klient chciał, żebym skonfigurował niestandardowe pole o nazwie „Guide Rank”, które umożliwiło mu przypisanie nr 1–20 do listy barów, o których pisali.

Po uruchomieniu zapytania o posty stwierdziłem, że meta_value jest traktowana jako ciąg znaków iw związku z tym kolejność sortowania jest pomieszana:

na przykład. 1, 10, 2, 3 css-tricks. Com C 7, 8, 9

Aby WordPress / MySQL używał „Naturalnej kolejności sortowania”, wystarczy zastosować +0 do nazwy pola, a zostanie ona potraktowana jako liczba (np. Meta_value + 0).

Aby istniejące zachowanie nie zostało przerwane, właśnie dodałem nowy typ „meta_value_num”.

Moja linia zapytania wygląda teraz następująco:

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

Co zwraca: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

To jest do włączenia do pnia WordPress - więc miejmy nadzieję, że po zastosowaniu nie będzie potrzeby ręcznej edycji pliku.