¿Cómo usar orderby con meta_query en WordPress 3.1?
¿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.

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.

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

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?
