Order by meta_value_num DESC and meta_value ASC on WP 4.0

I have created a custom post type that I want to order by

  1. custom-field-1, which is boolean so its value is either 1 or 0, in DESC order (1 to 0)
  2. custom-field-2, which contains text and is supposed to be ordered ASC (A to Z)

First Question:

A more powerful ORDERBY-parameter was introduced in WordPress 4.0. Can this be made using the new ORDERBY functionality?

If not, second Question:

What’s the best approach? How would I make a meta_query order the posts by custom-field-1 in descending order and then by custom-field-2 in ascending order?

Edit:

Or would it be an option to use two instances of WP_Query, one for the posts with custom-field-1 value="1” and one for those with value 0 ?

I know this “order by multiple custom field values” has been discussed a lot here, but I did not find a similar question I could adapt when I was searching the site before.

1 Answer
1

Although the new orderby parameter is great in WP_Query, it does not support multiple orderby for multiple meta_key‘s.

I’ve went through a couple of scenarios and even went and digged into trac and make and came up with the following

  • make.wordpress.org A more powerful orderby in wordpress 4.0

  • trac ticket #17065

None of the issues regarding this very problem have been answered. It also seems from those two links that there is an issue ordering by a meta_key and another field like post date for instance. I haven’t tried this as yet.

I truelly think that you have two choices here without creating two queries.

  • hack using the posts_orderby filter as described by @s_ha_dum in his answer here

  • By making use of PHP ordering using usort. The idea here would be to sort your query by one meta_key and then take the returned posts array ($posts) and sort them by the second meta_key before the loop starts. You can either use the the_posts filter (just remember to remove the filter once done) or simply unset $posts in your template and set it with the reordered array of posts once done

Leave a Comment