Ordinamento naturale tramite post meta_key - Trucchi CSS

Sommario

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

Questa è una modifica diretta a un file principale: /wp-includes/query.php Nota i segni più nel codice sopra indicano nuove righe da aggiungere .

Note dell'autore:

Un cliente voleva che impostassi un campo personalizzato chiamato "Classifica guida" che gli consentisse di assegnare il numero 1 - 20 per un elenco di bar su cui stavano postando.

Dopo aver eseguito la query sui post, ho scoperto che meta_value veniva trattato come una stringa e come tale l'ordinamento era confuso:

per esempio. 1, 10, 2, 3css-trucchi.com C 7, 8, 9

Per fare in modo che WordPress / MySQL utilizzi "Natural Sort Order" è sufficiente applicare +0 al nome del campo e verrà trattato come un numero (es. Meta_value + 0).

Affinché il comportamento esistente non venga interrotto, ho appena aggiunto il nuovo tipo "meta_value_num".

La mia riga di query ora ha il seguente aspetto:

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

Che restituisce: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Questo è per l'inclusione nel tronco di WordPress, quindi si spera che una volta applicato non dovrebbe essere necessario modificare manualmente il file.

Articoli interessanti...