Comment utilisez-vous orderby avec meta_query dans Wordpress 3.1?

21

Est-il possible de commander ma liste de publications personnalisées, après l'avoir filtrée avec meta_query, par les métadonnées de mon choix?

Par exemple, j'ai un type de publication personnalisé appelé webinaires. J'essaie de répertorier tous les webinaires à venir et de les faire commander par le champ méta personnalisé appelé webinar_startDate.

En utilisant la requête suivante, j'ai pu retourner les webinaires avec succès en excluant les anciens webinaires. Cependant, ils sortent toujours dans l'ordre où ils ont été publiés, et non par 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'
); ?>

Je soupçonne qu'en raison du changement de 3.0 à 3.1, l'utilisation de orderby => meta_value est probablement différente, mais je ne trouve pas de réponse dans la documentation WordPress pour l'expliquer.

Quelqu'un peut-il aider? Merci d'avance.

Jeff K.
la source

Réponses:

17

le nouveau meta_querytableau sélectionne les publications de retour de la requête. Alors oui, vous indiquez la «clé» à l'intérieur meta_query, mais vous pouvez toujours utiliser l'ancienne méthode de

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

en plus de la meta_query, car ces lignes indiquent comment trier la requête résultante. Alors oui, vous pouvez indiquer deux fois la même méta-clé.

somatique
la source
9
Cette réponse n'est pas tout à fait juste. Si vous ajoutez un orderby et une meta_key en dehors d'une meta_query existante, le résultat sera en effet trié par la clé fournie - mais il inclura également toute publication où cette méta-clé est définie, même si la valeur ne répond pas aux critères dans la meta_query (du moins, c'est ainsi que cela a fonctionné pour moi lors des tests). Une meilleure façon de le faire pourrait être de passer un tableau en tant que paramètre orderby, comme décrit ici: core.trac.wordpress.org/ticket/17065#comment:14
MathSmath
1

J'utilise le code suivant pour mes messages personnalisés appelés events, pour obtenir tous les messages dans une boucle.

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

Je pense que vous utilisez votre code approximativement de la même manière. Je pense que vous manque le meta_keyavec le nom du méta-champ à trier. Peut-être que cela aide si vous ajoutez

'meta_key' => 'webinar_startDate',

au tableau extérieur?

Guru 2.0
la source
Je vois maintenant. J'ai été confus par la documentation Wordpress qui disait que 'meta_key' et 'meta_value' étaient dépréciés. J'ai supposé que cela signifiait que je ne pouvais pas les utiliser, mais je suppose que c'était trompeur. Merci!
Jeff K.