Tri naturel à l'aide du message meta_key - Astuces 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; )

Il s'agit d'une modification directe d'un fichier de base: /wp-includes/query.php Notez que les signes plus dans le code ci-dessus indiquent de nouvelles lignes à ajouter .

Notes de l'auteur:

Un client voulait que je mette en place un champ personnalisé appelé «Guide Rank» qui leur permettait d'attribuer le numéro 1 à 20 pour une liste des barres sur lesquelles ils publiaient.

Après avoir exécuté la requête de publication, j'ai trouvé que la meta_value était traitée comme une chaîne et que l'ordre de tri était donc brouillé:

par exemple. 1, 10, 2, 3css-tricks.comC 7, 8, 9

Pour que WordPress / MySQL utilise «Ordre de tri naturel», il vous suffit d'appliquer +0 au nom du champ et il sera traité comme un nombre (par exemple, meta_value + 0).

Pour que le comportement existant ne soit pas interrompu, je viens d'ajouter le nouveau type 'meta_value_num'.

Ma ligne de requête ressemble maintenant à:

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

Qui renvoie: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Ceci est à inclure dans le coffre WordPress - donc j'espère qu'une fois qu'il sera appliqué, il ne devrait pas être nécessaire de modifier manuellement le fichier.