J'ai créé un type de message personnalisé (sidebar_element) qui apparaît dans l'encadré. Sur chaque élément de la barre latérale, l’administrateur peut choisir où il doit être affiché, c’est-à-dire. 'top', 'middle' ou 'bottom', et que la valeur est enregistrée dans le champ méta. Les méta-valeurs pour ces alignements sont 30, 20 et 10.
Maintenant, s'il y a plusieurs éléments de la barre latérale avec le même alignement, ils doivent être alignés avec la valeur donnée par menu_order.
C'est comme ça que j'essaye de réaliser tout ça, dans mon sidebar.php
$sidebarElems = new WP_Query( array (
'post_type' => 'sidebar_element',
'posts_per_page' => -1,
'meta_key' => 'sidebar_element_meta_alignment',
'orderby' => 'meta_value_num menu_order',
'order' => 'DESC' ) );
Cela ne fonctionne cependant pas. Les éléments sont d'abord triés par meta_value_num
croissant , puis correctement par menu_order
. Si je supprime le menu_order
de orderby
, meta_values
est correctement commandé.
Cette chose me rend fou!
S'il vous plaît aider. Merci.
EDIT
Voici la requête SQL générée, lorsque var_dump($sidebarElems)
SELECT XXX_posts.* FROM XXX_posts
INNER JOIN XXX_postmeta ON (XXX_posts.ID = XXX_postmeta.post_id)
WHERE 1=1 AND XXX_posts.post_type = 'sidebar_element' AND (XXX_posts.post_status = 'publish') AND (XXX_postmeta.meta_key = 'sidebar_element_meta_alignment' )
GROUP BY XXX_posts.ID
ORDER BY XXX_postmeta.meta_value+0,XXX_posts.menu_order DESC
RÉPONSE
Vous avez trouvé une réponse, vérifiez ci-dessous
Trouvé une réponse à cela.
D'une manière ou d'une autre, la propre variable orderby
de WordPress n'est pas totalement fonctionnelle lorsque vous essayez de classer par plusieurs valeurs.
J'ai résolu ce problème en remplaçant WP_Query
par SQL Query
et en incluant la seconde DESC
après _postmeta.meta_value+0
SELECT XXX_posts.* FROM XXX_posts
INNER JOIN XXX_postmeta ON (XXX_posts.ID = XXX_postmeta.post_id)
WHERE 1=1 AND XXX_posts.post_type = 'sidebar_element' AND (XXX_posts.post_status = 'publish') AND (XXX_postmeta.meta_key = 'sidebar_element_meta_alignment' )
GROUP BY XXX_posts.ID
ORDER BY XXX_postmeta.meta_value+0 DESC,XXX_posts.menu_order DESC