J'ai créé un type de message personnalisé que je souhaite commander par
custom-field-1
, qui est booléen, sa valeur est donc 1
ou 0
, dans l'ordre DESC
(1 à 0)custom-field-2
, qui contient du texte et est censé être commandé ASC
(A à Z)Première question:
Un paramètre ORDERBY plus puissant a été introduit dans WordPress 4.0. Cela peut-il être fait en utilisant la nouvelle fonctionnalité ORDERBY?
Si non, deuxième question:
Quelle est la meilleure approche? Comment pourrais-je créer un meta_query
pour classer les publications par custom-field-1
par ordre décroissant, puis par custom-field-2
par ordre croissant?
Modifier:
Ou serait-ce une option d'utiliser deux instances de WP_Query
, une pour les publications avec custom-field-1 value = '1
'et une pour celles avec la valeur 0
?
Je sais que cette "commande par plusieurs valeurs de champ personnalisées" a beaucoup été discutée ici, mais je n'ai pas trouvé de question similaire que je puisse adapter lorsque je cherchais sur le site auparavant.
Bien que le nouveau paramètre orderby
soit excellent dans WP_Query
, il ne prend pas en charge plusieurs orderby
pour plusieurs meta_key
'.
Je suis passé par quelques scénarios et je suis même allé creuser et tracer et faire et est venu avec ce qui suit
make.wordpress.org Un ordre plus puissantpar wordpress 4.0
Aucune des questions concernant ce problème n'a été résolue. Il semble également que, d'après ces deux liens, il existe un problème de classement par meta_key
et un autre champ tel que post date, par exemple. Je n'ai pas encore essayé cela.
Je pense vraiment que vous avez deux choix ici sans créer deux requêtes.
pirater en utilisant le filtre posts_orderby
comme décrit par @s_ha_dum dans sa réponse ici
En utilisant PHP, utilisez usort
. L'idée ici serait de trier votre requête en un meta_key
, puis en prenant le tableau posts retourné ($ posts) et en les triant en fonction du second meta_key
avant le début de la boucle. Vous pouvez soit utiliser le filtre the_posts
(n'oubliez pas de supprimer le filtre une fois terminé) ou simplement désélectionner $posts
dans votre modèle et le définir avec le tableau réorganisé de publications une fois terminé.