¿Cómo se usa orderby con meta_query en Wordpress 3.1?

21

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

Por ejemplo, tengo un tipo de publicación personalizado llamado webinars. Estoy tratando de enumerar todos los próximos seminarios web y ordenarlos por el metacampo personalizado llamado webinar_startDate.

Utilizando la siguiente consulta, pude devolver los seminarios web con éxito, excluyendo los seminarios web anteriores. Sin embargo, todavía salen 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 es probablemente diferente, pero no puedo encontrar una respuesta en la documentación de WordPress para explicar esto.

¿Alguien puede ayudar? Gracias por adelantado.

Jeff K.
fuente

Respuestas:

17

la nueva meta_querymatriz selecciona qué publicaciones devuelve la consulta. Entonces, sí, estás indicando la 'clave' dentro de eso meta_query, pero aún puedes usar el método anterior de

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

además de meta_query, ya que estas líneas indican cómo ordenar la consulta resultante. Entonces sí, puede indicar la misma meta_key dos veces.

somático
fuente
99
Esta respuesta no es completamente correcta. Si agrega un orderby y una meta_key fuera de una meta_query existente, el resultado se ordenará por la clave proporcionada, pero también incluirá cualquier publicación donde se establezca esa meta clave, incluso si el valor no cumple con los criterios en el meta_query (al menos, así es como me funcionó en las pruebas). Una mejor manera de hacer esto podría ser pasar una matriz como el parámetro de orden, como se describe aquí: core.trac.wordpress.org/ticket/17065#comment:14
MathSmath
1

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

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

Creo que está usando su código aproximadamente de la misma manera. Creo que te falta el meta_keynombre del metacampo para ordenar. Quizás ayuda si agrega

'meta_key' => 'webinar_startDate',

a la matriz externa?

Guru 2.0
fuente
Ya lo veo. Estaba confundido por la documentación de Wordpress que decía que 'meta_key' y 'meta_value' se depreciaron. Supuse que eso significaba que no podía usarlos, pero supongo que fue engañoso. ¡Gracias!
Jeff K.