J'ai besoin de passer une commande à plusieurs niveaux dans une requête. Le problème est de commander une valeur DESC et l'autre ASC comme dans SQL. Le SQL suivant semble me donner ce que je veux quand je l'exécute dans le terminal:
SELECT DISTINCT * FROM wp_posts
INNER JOIN wp_postmeta
ON wp_posts.ID = wp_postmeta.post_id
WHERE wp_posts.post_type = 'post'
AND wp_postmeta.meta_key = 'pb_issue_featured'
AND wp_posts.post_status = 'publish'
ORDER BY wp_postmeta.meta_value DESC, wp_posts.menu_order ASC;
La pb_issue_featured
est une valeur booléenne. Le résultat final dont j'ai besoin est la requête pour afficher les messages qui ont une méta valeur de 1 pour ce champ en haut, puis tous les autres ci-dessous. Ensuite, la commande de deuxième niveau est désignée menu_order
(j'utilise le plugin de commande des types de publication).
Le problème est que ma valeur booléenne doit être ordonnée de haut en bas (1 à 0) mais le menu_order est le contraire. Ce qui est commandé en premier avec le plugin a un ordre de menu de 1. Donc, utiliser le «orderby» intégré dans WP_Query ne fonctionne pas. Quelqu'un a des suggestions? J'ai regardé le filtre 'posts_orderby' mais je n'ai pas réussi à le prendre. Je ne savais pas vraiment où il devait être appliqué ni comment je pouvais le dépanner. Il n'a tout simplement pas réorganisé comme je l'avais.
Merci pour l'aide! Je publierai la WP_Query réelle si elle est pertinente, mais je voulais que cela soit aussi court que possible.
La requête argumente:
$args = array(
'post_type' => 'post',
'meta_key' => 'pb_issue_featured',
'orderby' => 'meta_value',
'order' => 'DESC',
'post_status' => 'publish',
'posts_per_page' => $posts,
'paged' => $paged,
'meta_query' => array(
array(
'key' => 'headline',
'value' => 1,
'compare' => '!='
)
)
);
$q = new WP_Query($args);
Réponses:
Essaye ça:
la source