web-dev-qa-db-fra.com

Trier par meta_value_num DESC et meta_value ASC sur WP 4.0

J'ai créé un type de message personnalisé que je souhaite commander par

  1. custom-field-1, qui est booléen, sa valeur est donc 1 ou 0, dans l'ordre DESC (1 à 0)
  2. 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.

3
okiedokey

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

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é.

2
Pieter Goosen