Naturlig sortering ved hjælp af indlæg meta_key - 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; )

Dette er en direkte redigering af en kernefil: /wp-includes/query.php Bemærk plustegnene i ovenstående kode angiver nye linjer, der skal tilføjes .

Forfatterens bemærkninger:

En klient ville have mig til at opsætte et brugerdefineret felt kaldet “Guide Rank”, som tillod dem at tildele nr. 1 - 20 til en liste over barer, de sendte om.

Efter at have kørt indlægsforespørgslen fandt jeg, at meta_value blev behandlet som en streng, og som sådan blev sorteringsrækkefølgen blandet:

for eksempel. 1, 10, 2, 3css-tricks.com C 7, 8, 9

For at få WordPress / MySQL til at bruge "Natural Sort Order" skal du bare anvende +0 til feltnavnet, og det behandles som et tal (f.eks. Meta_value + 0).

Så for at eksisterende adfærd ikke afbrydes, har jeg lige tilføjet den nye type 'meta_value_num'.

Min forespørgselslinje ser nu ud:

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

Hvilket returnerer: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Dette kan optages i WordPress-bagagerummet - så forhåbentlig når det først er anvendt, skal der ikke være behov for manuel redigering af filen.