[wp-trac] [WordPress Trac] #31045: Ordering a Query Using Multiple Meta Keys

WordPress Trac noreply at wordpress.org
Wed Jan 28 18:27:23 UTC 2015

#31045: Ordering a Query Using Multiple Meta Keys
 Reporter:  Funkatronic      |       Owner:
     Type:  feature request  |      Status:  new
 Priority:  normal           |   Milestone:  Future Release
Component:  Query            |     Version:  trunk
 Severity:  normal           |  Resolution:
 Keywords:  has-patch        |     Focuses:
Changes (by boonebgorges):

 * keywords:  needs-patch needs-unit-tests => has-patch


 Thanks for these patches. I started working on your patch last night, and
 it wasn't working properly for me - but maybe this was fixed by your
 version 2 :)

 In any case, in the process of playing with table aliases, I started to
 have second thoughts. The way table aliases are currently built in
 `WP_Meta_Query` is like this: the first JOINed table is aliased as
 `$wpdb->postmeta`, and subsequent tables as `mt1`, `mt2`, etc. That first
 "unaliased" JOIN is then referenced in a number of places in `WP_Query`,
 and my guess is that there are plugins that are depending on it as well.
 For this reason, I'm hesitant to change table aliases. And,
 notwithstanding my earlier comments, it's not really necessary for what we
 want to accomplish here anyway.

 [attachment:31045.diff] takes a slightly different tack. Aliases are built
 in the same way as before. Meta queries now accept a `'name'` parameter.
 The meta query object now has a method `get_clauses()` which returns a
 flattened array of query clauses. This array is keyed by 'name', and
 contains 'cast' values, which are then used by `WP_Query` to build the
 ORDER BY clause. See the unit tests for examples.

 What do you think?

Ticket URL: <https://core.trac.wordpress.org/ticket/31045#comment:13>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform

More information about the wp-trac mailing list