WP_Query ordenar por valor numérico de términos de taxonomía
Tengo esta consulta...
<?php
$press = new WP_Query(array(
'posts_per_page' => -1,
'post_type' => 'individual',
'post_status' => 'private'
));
if ($press->have_posts()) : while ($press->have_posts()) : $press->the_post();
?>
Pero mis tipos de post personalizados están usando una taxonomía personalizada con un valor de término numérico.
Mi pregunta es: ¿hay alguna forma de ordenar esta consulta por el valor del término?
La taxonomía se llama 'individual-group'
Cualquier ayuda sería enormemente apreciada. Gracias.
Josh
No, no hay forma de hacer esto con el núcleo predeterminado de WordPress. @heathenJesus habla sobre metadatos, no taxonomías. Consulta http://scribu.net/wordpress/sortable-taxonomy-columns.html para una solución adecuada.
Y una explicación más detallada de por qué esto no está integrado en el núcleo: ¿Es posible usar wp_query para ordenar por taxonomía?
Aquí está la consulta compleja que utilicé para ordenar numéricamente y filtrar la consulta de posts por slugs de taxonomía.
$my_post_type = 'some_post_type';
$my_term_slug_to_be_used_for_Ordering = 'some_slug'; // Slug para ordenamiento
$my_term_slug_to_be_used_for_Filtering = 'some_other_slug'; // Slug para filtrado
$querystr = "
SELECT
$wpdb->posts.*, $wpdb->term_relationships.object_id,
(SELECT wpt.slug
FROM $wpdb->term_taxonomy wptt
INNER JOIN $wpdb->term_relationships wptr ON wptt.term_taxonomy_id = wptr.term_taxonomy_id
INNER JOIN $wpdb->terms wpt ON wpt.term_id = wptt.term_id
WHERE
wptr.object_id = $wpdb->term_relationships.object_id AND
wptt.taxonomy = 'my_term_slug_to_be_used_for_Ordering') AS numeric_column_value
FROM $wpdb->term_taxonomy INNER JOIN $wpdb->term_relationships ON $wpdb->term_taxonomy.term_taxonomy_id = $wpdb->term_relationships.term_taxonomy_id
INNER JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->term_relationships.object_id
INNER JOIN $wpdb->terms ON $wpdb->terms.term_id = $wpdb->term_taxonomy.term_id
WHERE
$wpdb->terms.slug = '{$my_term_slug_to_be_used_for_Filtering}' AND
$wpdb->posts.post_type = '$my_post_type' AND $wpdb->posts.post_status = 'publish'
ORDER BY numeric_column_value * 1 DESC"; // En realidad es un string, por eso *1 para convertirlo a numérico
$r = $wpdb->get_results($querystr, OBJECT);
Claro, en el parámetro orderby, existe una opción llamada meta_value_num que debería hacer exactamente lo que estás buscando.
http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters
$press = new WP_Query(array(
'posts_per_page' => -1,
'post_type' => 'individual',
'post_status' => 'private',
'orderby' => 'meta_value_num',
'meta_key' => 'individual-group'
));
... siempre y cuando el meta_value sea realmente un número. Hay más de un par de publicaciones aquí donde la gente intenta ordenar numéricamente cosas que no son números :) @heathenJesus, ¿puedes proporcionar un código de ejemplo? Las respuestas que solo contienen enlaces están desaconsejadas.
s_ha_dum
La pregunta especificaba claramente "taxonomía personalizada con un valor de término numérico."
Agregué una demostración del uso de 'meta_value_num'.
heathenJesus
Oh, lo sé. Eso no era en absoluto una crítica a tu respuesta. Simplemente no confío, en general, en las personas cuando dicen "numérico". A veces significa algo como "$100" o "123-04". Coloquialmente son números pero no son numéricos para el software. Y trabajo con una oficina llena de personas así, así que he aprendido a especificar con mucho cuidado.
s_ha_dum
@heathenJesus entonces estás diciendo que realmente puedo consultar términos de taxonomía de la misma manera que consulto campos personalizados? Pensé que las meta keys y los términos de taxonomía registrados eran cosas separadas... Por ejemplo, ¿podría consultar usando tu método un término de categoría a través de 'meta_key'? No creía que se pudiera hacer eso...
Joshc