Orden natural usando Post meta_key - Trucos 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; )

Esta es una edición directa a un archivo central: /wp-includes/query.php Tenga en cuenta que los signos más en el código anterior indican nuevas líneas para agregar .

Notas del autor:

Un cliente quería que configurara un campo personalizado llamado “Rango de guía” que les permitía asignar del 1 al 20 para una lista de bares sobre los que publicaban.

Después de ejecutar la consulta de publicaciones, descubrí que el meta_value se estaba tratando como una cadena y, como tal, el orden de clasificación estaba desordenado:

p.ej. 1, 10, 2, 3css-tricks.com C 7, 8, 9

Para que WordPress / MySQL use “Orden de clasificación natural”, solo necesita aplicar +0 al nombre del campo y será tratado como un número (por ejemplo, meta_value + 0).

Para que el comportamiento existente no se interrumpa, acabo de agregar el nuevo tipo 'meta_value_num'.

Mi línea de consulta ahora se ve así:

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

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

Esto se puede incluir en el tronco de WordPress, por lo que, una vez que se aplique, no debería ser necesario editar manualmente el archivo.