Classificação natural usando Post 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; )

Esta é uma edição direta de um arquivo principal: /wp-includes/query.php Observe que os sinais de mais no código acima indicam novas linhas a serem adicionadas .

Notas do autor:

Um cliente queria que eu configurasse um campo personalizado chamado “Classificação do Guia”, que permitia atribuir de 1 a 20 uma lista de Barras sobre as quais estavam postando.

Depois de executar a consulta de posts, descobri que o meta_value estava sendo tratado como uma string e, como tal, a ordem de classificação estava confusa:

por exemplo. 1, 10, 2, 3css-tricks.comC 7, 8, 9

Para fazer o WordPress / MySQL usar “Ordem de classificação natural”, você só precisa aplicar +0 ao nome do campo e ele será tratado como um número (por exemplo, meta_value + 0).

Para que o comportamento existente não seja interrompido, acabei de adicionar o novo tipo 'meta_value_num'.

Minha linha de consulta agora se parece com:

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

Que retorna: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Isso está disponível para inclusão no tronco do WordPress - então, esperançosamente, uma vez que for aplicado, não haverá necessidade de editar manualmente o arquivo.