WP_Query ordenar por valor numérico de términos de taxonomía

20 feb 2013, 16:37:43
Vistas: 14K
Votos: 3

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

0
Todas las respuestas a la pregunta 3
1

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?

1 mar 2013 00:37:59
Comentarios

Gracias Evan, me aseguraré de crear meta claves para esto en el futuro si alguna vez necesito ordenar un término de taxonomía.

Joshc Joshc
1 mar 2013 11:54:30
0

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);
4 mar 2014 22:04:12
6

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'
));
20 feb 2013 17:02:27
Comentarios

... 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 s_ha_dum
20 feb 2013 17:44:08

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 heathenJesus
21 feb 2013 23:03:00

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 s_ha_dum
21 feb 2013 23:18:51

Tiene sentido, @s_ha_dum

heathenJesus heathenJesus
21 feb 2013 23:22:45

@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 Joshc
23 feb 2013 02:32:14

como en 'orderby' => 'meta_value_num', 'meta_key' => 'category'? Obviamente mi término de categoría tiene que ser puramente numérico para que la función orderby funcione, claro..

Joshc Joshc
23 feb 2013 02:36:27
Mostrar los 1 comentarios restantes