¿Cómo usar orderby con meta_query en WordPress 3.1?

2 mar 2011, 20:59:39
Vistas: 23.2K
Votos: 22

¿Es posible ordenar mi lista de posts personalizados, después de filtrarla con meta_query, por los metadatos de mi elección?

Por ejemplo, tengo un tipo de post personalizado llamado webinars. Estoy tratando de listar todos los webinars próximos y ordenarlos por el campo meta personalizado llamado webinar_startDate.

Usando la siguiente consulta, pude obtener los webinars exitosamente excluyendo los webinars antiguos. Sin embargo, todavía aparecen en el orden en que fueron publicados, y no por webinar_startDate.

<?php $my_array =  array(
    'meta_query' => array(
            array(
                'key' => 'webinar_startDate',
                'value' => date("Y-m-d H:i:s"),
                'compare' => '>=',
                'type' => 'DATETIME'
            )
    ),
    'orderby' => 'meta_value',
    'post_type' => 'webinars',
    'posts_per_page' => 20,
    'order' => 'ASC'
); ?>

Sospecho que debido al cambio de 3.0 a 3.1, el uso de orderby => meta_value probablemente sea diferente, pero no puedo encontrar una respuesta en la documentación de WordPress que explique esto.

¿Alguien puede ayudar? Gracias de antemano.

0
Todas las respuestas a la pregunta 2
1
17

el nuevo array meta_query selecciona qué posts devuelve la consulta. Así que sí, estás indicando la 'key' dentro de ese meta_query, pero aún puedes usar el método antiguo de

'orderby' => 'meta_value',
'meta_key' => '_events_meta',

además del meta_query, ya que estas líneas indican cómo ordenar la consulta resultante. Por lo tanto, sí, podrías indicar la misma meta_key dos veces.

2 mar 2011 21:38:55
Comentarios

Esta respuesta no es del todo correcta. Si agregas un orderby y un meta_key fuera de una meta_query existente, el resultado efectivamente se ordenará por la clave proporcionada, pero también incluirá cualquier publicación donde esa meta clave esté establecida, incluso si el valor no cumple con los criterios de la meta_query (al menos, así funcionó en mis pruebas). Una mejor manera de hacer esto podría ser pasar un array como parámetro orderby, como se describe aquí: http://core.trac.wordpress.org/ticket/17065#comment:14

MathSmath MathSmath
3 abr 2012 19:59:33
1

Estoy utilizando el siguiente código para mis publicaciones personalizadas llamadas events, para obtener todas las publicaciones en un Loop.

$evtLoop = new WP_Query(array('post_type' => 'events',
                              'posts_per_page' => 10,
                              'orderby' => 'meta_value', 
                              'meta_key' => '_events_meta',
                              'order'=>'DESC'));

Creo que estás usando tu código de manera similar. Probablemente te falta el meta_key con el nombre del campo meta para ordenar. Quizás te ayude si agregas

'meta_key' => 'webinar_startDate',

al array externo?

2 mar 2011 21:34:30
Comentarios

Ahora lo entiendo. Me confundió la documentación de WordPress que decía que 'meta_key' y 'meta_value' estaban obsoletos. Asumí que eso significaba que no podía usarlos, pero supongo que fue engañoso. ¡Gracias!

Jeff K. Jeff K.
2 mar 2011 23:55:47