Commit Graph

119 Commits

Author SHA1 Message Date
Scott Taylor b6c01b80fa Meta: move `WP_Meta_Query` into its own file. `meta.php` loads the new files, so this is 100% BC if someone is loading `meta.php` directly. New files created using `svn cp`.
Creates: 
`class-wp-meta-query.php` 
`meta-functions.php` 

`meta.php` contains only top-level code. Class file only contains the class. Functions file only contains functions.

See #33413.

Built from https://develop.svn.wordpress.org/trunk@33761


git-svn-id: http://core.svn.wordpress.org/trunk@33729 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-08-26 13:02:21 +00:00
Drew Jaynes a7b38bf90a Docs: Correct the phpDoc type to a boolean for the `$single` parameter in the `get_{$meta_type}_metadata` hook docs.
Props dlh.
Fixes #33451.

Built from https://develop.svn.wordpress.org/trunk@33665


git-svn-id: http://core.svn.wordpress.org/trunk@33632 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-08-20 19:36:25 +00:00
Drew Jaynes 6639c342a5 Fix inline documentation syntax in the DocBlock for `WP_Meta_Query->has_or_relation()`, added in 4.3.
See [32713]. See #32891.

Built from https://develop.svn.wordpress.org/trunk@33231


git-svn-id: http://core.svn.wordpress.org/trunk@33203 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-07-13 21:44:24 +00:00
Boone Gorges 5dfd6a02a7 Avoid returning duplicate matches when using a meta query in `WP_User_Query`.
A meta_query containing an `OR` relation can result in the same record matching
multiple clauses, leading to duplicate results. The previous prevention against
duplicates [18178] #17582 became unreliable in 4.1 when `WP_Meta_Query`
introduced support for nested clauses. The current changeset adds a new method
`WP_Meta_Query::has_or_relation()` for checking whether an `OR` relation
appears anywhere in the query, and uses the new method in `WP_User_Query` to
enforce distinct results as necessary.

Props maxxsnake.
Fixes #32592.
Built from https://develop.svn.wordpress.org/trunk@32713


git-svn-id: http://core.svn.wordpress.org/trunk@32683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-09 17:42:28 +00:00
Scott Taylor cae2415562 Fix doc blocks for `meta.php`
See #32444.

Built from https://develop.svn.wordpress.org/trunk@32610


git-svn-id: http://core.svn.wordpress.org/trunk@32580 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-05-26 19:33:25 +00:00
Boone Gorges 11226f02a8 Allow metadata to be deleted when meta_value matches 0 or '0'.
In `delete_metadata()`, be stricter about when to ignore a falsey value of
`$meta_value`.

For backward compatibility, an empty string for `$meta_value` is equivalent to
`null` or `false`.

Props sc0ttkclark.
Fixes #32224.
Built from https://develop.svn.wordpress.org/trunk@32331


git-svn-id: http://core.svn.wordpress.org/trunk@32302 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-05-01 16:38:29 +00:00
Drew Jaynes 156e3d14ed Add a missing `@access` tag to the DocBlock for the `WP_Meta_Query->$clauses` property.
Also adds a missing return description for `WP_Meta_Query::get_clauses()`.

See [31312]. See #31888.

Built from https://develop.svn.wordpress.org/trunk@32044


git-svn-id: http://core.svn.wordpress.org/trunk@32023 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-05 16:11:27 +00:00
Boone Gorges 7bde88d02e Modify `meta_query orderby syntax to use array keys as clause "handles".
The implementation of `meta_query` orderby introduced in [31312] put clause
identifiers into a 'name' parameter of the clause. For greater clarity, this
changeset updates the syntax to use the associative array key used when
defining `meta_query` parameters, instead of the 'name' parameter.

Props Funkatronic, DrewAPicture.
Fixes #31045.
Built from https://develop.svn.wordpress.org/trunk@31340


git-svn-id: http://core.svn.wordpress.org/trunk@31321 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-02-05 19:38:23 +00:00
Boone Gorges ca30c725a0 Improve support for ordering `WP_Query` results by postmeta.
`WP_Meta_Query` clauses now support a 'name' parameter. When building a
`WP_Query` object, the value of 'orderby' can reference this 'name', so that
it's possible to order by any clause in a meta_query, not just the first one
(as when using 'orderby=meta_value'). This improvement also makes it possible
to order by multiple meta query clauses (or by any other eligible field plus
a meta query clause), using the array syntax for 'orderby' introduced in [29027].

Props Funkatronic, boonebgorges.
Fixes #31045.
Built from https://develop.svn.wordpress.org/trunk@31312


git-svn-id: http://core.svn.wordpress.org/trunk@31293 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-01-31 15:48:24 +00:00
Scott Taylor bc55996a0b `@param` cleanup:
* `get_metadata()` will return literally anything, needs to be `mixed`
* `wp()` and `WP_Query::__construct()` no longer just take a query string
* Clarify a few others

See #30799.

Built from https://develop.svn.wordpress.org/trunk@31212


git-svn-id: http://core.svn.wordpress.org/trunk@31193 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-01-16 19:03:23 +00:00
Scott Taylor 60b0cd7943 The keyword `elseif` should be used instead of `else if` so that all control keywords look like single words.
This was a mess, is now standardized across the codebase, except for a few 3rd-party libs. 

See #30799.

Built from https://develop.svn.wordpress.org/trunk@31090


git-svn-id: http://core.svn.wordpress.org/trunk@31071 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-01-08 07:05:25 +00:00
Scott Taylor 42f5acd869 Improve some docs for `@param`. Remove an unneeded `$wpdb` global import.
See #30799.

Built from https://develop.svn.wordpress.org/trunk@30979


git-svn-id: http://core.svn.wordpress.org/trunk@30965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-12-20 20:56:22 +00:00
Boone Gorges 5eeea164ef In `WP_Meta_Query`, interpret 'value' correctly when used with EXISTS/NOT EXISTS.
As in earlier versions, EXISTS with a value is equivalent to '=', while NOT
EXISTS should always ignore 'value'.

Props barrykooij.
Fixes #30681 for trunk.
Built from https://develop.svn.wordpress.org/trunk@30846


git-svn-id: http://core.svn.wordpress.org/trunk@30836 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-12-14 19:01:26 +00:00
Drew Jaynes 23707b1ada Convert various uses of `(optional)` in core parameter descriptions to use the style prescribed in the inline documentation standards for PHP.
The style for marking parameters optional in inline PHP docs is: `@param type $var Optional. Description. Accepts. Default.`, where Accepts can be omitted on a case-by-case basis.

Props coffee2code.
Fixes #30591.

Built from https://develop.svn.wordpress.org/trunk@30753


git-svn-id: http://core.svn.wordpress.org/trunk@30743 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-12-06 21:24:45 +00:00
John Blackbourn d28823df33 Revert r30115 which was a breaking change for code which interacts with the return value of `get_metadata()` when no meta key is specified.
See #15030

Built from https://develop.svn.wordpress.org/trunk@30701


git-svn-id: http://core.svn.wordpress.org/trunk@30691 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-12-02 03:35:22 +00:00
Scott Taylor a0df295f5c Improve various `@param` docs.
See #30224.

Built from https://develop.svn.wordpress.org/trunk@30674


git-svn-id: http://core.svn.wordpress.org/trunk@30664 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-11-30 23:24:25 +00:00
Drew Jaynes d6e6dbf086 Docs Formatting: Backtick-escape inline code for all dynamic hook docs in wp-includes/meta.php.
Affects DocBlocks for the following hooks:
* `add_{$meta_type}_metadata`
* `add_{$meta_type}_meta`
* `added_{$meta_type}_meta`
* `update_{$meta_type}_metadata`
* `update_{$meta_type}_meta`
* `updated_{$meta_type}_meta`
* `delete_{$meta_type}_metadata`
* `delete_{$meta_type}_meta`
* `deleted_{$meta_type}_meta`
* `get_{$meta_type}_metadata`
* `delete_{$meta_type}meta`
* `deleted_{$meta_type}meta`
* `sanitize_{$meta_type}_meta_{$meta_key}`

See #30552.

Built from https://develop.svn.wordpress.org/trunk@30655


git-svn-id: http://core.svn.wordpress.org/trunk@30645 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-11-30 12:03:24 +00:00
Drew Jaynes f6fd6e09b1 4.1 Docs Audit: Improve inline documentation for various `WP_Meta_Query` methods introduced or modified in 4.1.
See #30469.

Built from https://develop.svn.wordpress.org/trunk@30617


git-svn-id: http://core.svn.wordpress.org/trunk@30607 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-11-28 12:02:22 +00:00
Scott Taylor 106da1e9e6 In `WP_Meta_Query->get_sql_for_clause()`, the empty initialization of `$where` is dead code and can be removed.
See #30224.

Built from https://develop.svn.wordpress.org/trunk@30163


git-svn-id: http://core.svn.wordpress.org/trunk@30163 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-11-01 22:03:22 +00:00
Drew Jaynes a929ac44e1 Relocate hook docs so they directly precede the hook lines moved into foreach statements in [30140].
It's necessary for hook docs to directly precede hook lines so the parser can correctly match them up. This change relocates hook docs for `update_{$meta_type}_meta`, `update_postmeta`, `updated_{$meta_type}_meta`, and `updated_postmeta`.

Fixes #11683.

Built from https://develop.svn.wordpress.org/trunk@30149


git-svn-id: http://core.svn.wordpress.org/trunk@30149 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-11-01 04:18:23 +00:00
Boone Gorges c27548265e Pass all updated meta IDs to filters in `update_metadata()`.
Props wonderboymusic.
Fixes #11683.
Built from https://develop.svn.wordpress.org/trunk@30140


git-svn-id: http://core.svn.wordpress.org/trunk@30140 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-11-01 02:39:24 +00:00
Drew Jaynes 66c47f29bb Correct references of `@uses $wpdb` in core documentation to use `@global`.
See #30191, [30105].
Fixes #30217.

Built from https://develop.svn.wordpress.org/trunk@30122


git-svn-id: http://core.svn.wordpress.org/trunk@30122 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-10-31 17:56:22 +00:00
Boone Gorges 93ae51e801 Unserialize `get_metadata()` results when 'key' is omitted.
Props mattkeys, nacin.
Fixes #15030.
Built from https://develop.svn.wordpress.org/trunk@30115


git-svn-id: http://core.svn.wordpress.org/trunk@30115 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-10-30 10:25:22 +00:00
Drew Jaynes f8657d5890 Remove redundant and erroneous `@uses` tag from most core inline documentation.
Per our inline documentation standards, no further use of the `@uses` tag is recommended as used and used-by relationships can be derived through other means. This removes most uses of the tag in core documentation, with remaining tags to be converted to `@global` or `@see` as they apply.

Fixes #30191.

Built from https://develop.svn.wordpress.org/trunk@30105


git-svn-id: http://core.svn.wordpress.org/trunk@30105 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-10-30 01:05:24 +00:00
Boone Gorges b137059656 Make orderby=meta_value compatible with meta_query when relation=OR.
Passing orderby=meta_value and meta_key=foo to WP_Query should require that
each matched post have a meta value with the key 'foo'. To make this
requirement compatible with meta_query params that have the relation OR, we
nest the meta_query param, and join it using AND to a meta_query clause
generated from the meta_key/meta_compare/meta_type query vars.

Fixes #25538.
Built from https://develop.svn.wordpress.org/trunk@29964


git-svn-id: http://core.svn.wordpress.org/trunk@29711 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-10-19 18:54:19 +00:00
Boone Gorges 09e1239ad6 Remove redundant table alias check in WP_Meta_Query.
Also adds documentation for 'meta_query_find_compatible_table_alias' filter.

See #24093.
Built from https://develop.svn.wordpress.org/trunk@29953


git-svn-id: http://core.svn.wordpress.org/trunk@29701 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-10-18 02:22:19 +00:00
Boone Gorges 4ca2996eff Bail from cleaning meta query clause when it's not an array.
Later isset() checks on string values were causing notices on PHP < 5.4.

Props jorbin.
See #29642.
Built from https://develop.svn.wordpress.org/trunk@29941


git-svn-id: http://core.svn.wordpress.org/trunk@29692 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-10-17 20:25:19 +00:00
Boone Gorges 9345e9ffa5 Overhaul SQL generating logic in WP_Meta_Query to avoid unnecessary table joins.
The logic used to generate clause SQL in `WP_Meta_Query` is somewhat arcane,
stemming mostly from an ongoing effort to eliminate costly table joins when
they are not necessary. By systematizing the process of looking for shareable
joins - as was done in `WP_Tax_Query` [29902] - it becomes possible to simplify
the construction of SQL queries in `get_sql_for_clause()`. Moreover, the
simplified logic is actually considerably better at identifying shareable
joins, such that certain uses of `WP_Meta_Query` will see joins reduced by 50%
or more.

Includes integration tests for a representative cross-section of the query
clause combinations that result in shared table aliases.

Props boonebgorges, sc0ttkclark.
See #24093.
Built from https://develop.svn.wordpress.org/trunk@29940


git-svn-id: http://core.svn.wordpress.org/trunk@29691 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-10-17 20:21:18 +00:00
Boone Gorges d64b1ed955 Use only LEFT JOINs when a meta_query contains a NOT EXISTS clause.
Mixing LEFT and INNER JOIN in these cases results in posts with no metadata
being improperly excluded from results.

Props johnrom.
Fixes #29062.
Built from https://develop.svn.wordpress.org/trunk@29890


git-svn-id: http://core.svn.wordpress.org/trunk@29646 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-10-14 02:17:18 +00:00
Boone Gorges d1d9915f07 Introduce support for nested queries in WP_Meta_Query.
Previously, meta query arguments could be joined by a single AND or OR relation.
Now, these queries can be arbitrarily nested, allowing clauses to be linked
together with multiple relations.

Adds unit tests for the new nesting syntax. Modifies a few existing unit tests
that were overly specific for the old SQL syntax. Backward compatibility with
existing syntax is fully maintained.

Props boonebgorges, DrewAPicture.
See #29642.
Built from https://develop.svn.wordpress.org/trunk@29887


git-svn-id: http://core.svn.wordpress.org/trunk@29643 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-10-13 22:03:18 +00:00
Andrew Nacin 9cbad29eb8 Meta Query: Revert [28659] (and [28665]) due to regressions.
props boonebgorges.
fixes #29285. see #25538.

Built from https://develop.svn.wordpress.org/trunk@29650


git-svn-id: http://core.svn.wordpress.org/trunk@29424 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-08-27 20:23:16 +00:00
Scott Taylor eb66e40790 After [29339] and [29341], add more unit tests and less ambiguous type-checking before bailing in meta-related functions that expect a numeric value for `$object_id`.
Props SergeyBiryukov.
Fixes #28315.

Built from https://develop.svn.wordpress.org/trunk@29421


git-svn-id: http://core.svn.wordpress.org/trunk@29199 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-08-06 22:08:16 +00:00
Scott Taylor 0d2a5c437e Bail on `update_user_meta()` when `$object_id` is non-numeric.
Adds unit test.

Props jacklenox, wonderboymusic.
Fixes #28315.

Built from https://develop.svn.wordpress.org/trunk@29339


git-svn-id: http://core.svn.wordpress.org/trunk@29119 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-08-01 17:10:15 +00:00
Scott Taylor 05eeb16e30 Replace all uses of `like_escape()` with `$wpdb->esc_like()`.
Props miqrogroove.
See #10041.

Built from https://develop.svn.wordpress.org/trunk@28712


git-svn-id: http://core.svn.wordpress.org/trunk@28528 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-06-10 00:44:15 +00:00
Scott Taylor 38819880ec Wrap individual meta query `WHERE` clases in parens, missed in `28659`.
Props boonebgorges.
Fixes #25538.


Built from https://develop.svn.wordpress.org/trunk@28665


git-svn-id: http://core.svn.wordpress.org/trunk@28483 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-06-04 18:21:15 +00:00
Scott Taylor a7c2180672 Fix SQL generation when `meta_query` has an `'relation' => 'OR'` for its queries and wants to `'orderby' => 'meta_value'`.
Adds unit test.

Props jackreichert.
Fixes #25538.


Built from https://develop.svn.wordpress.org/trunk@28659


git-svn-id: http://core.svn.wordpress.org/trunk@28477 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-06-04 05:48:14 +00:00
Scott Taylor b539c1cd76 Add missing access modifiers to methods in `WP_Meta_Query`.
See #27881, #22234.

Built from https://develop.svn.wordpress.org/trunk@28522


git-svn-id: http://core.svn.wordpress.org/trunk@28348 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-19 06:35:14 +00:00
Scott Taylor b2b25f7326 In `update_metadata_by_mid()`, `$original_value` is unused.
See #27882.

Built from https://develop.svn.wordpress.org/trunk@28328


git-svn-id: http://core.svn.wordpress.org/trunk@28156 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-05-06 21:29:26 +00:00
Drew Jaynes a10a55cf87 Fix a typo in the `deleted_{$meta_type}_meta` hook description.
Props aliso.
Fixes #25826.

Built from https://develop.svn.wordpress.org/trunk@27723


git-svn-id: http://core.svn.wordpress.org/trunk@27560 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-25 20:34:15 +00:00
Drew Jaynes 97958a3c16 Inline documentation for hooks in wp-includes/meta.php.
Props raamdev and kpdesign.
Fixes #25826.

Built from https://develop.svn.wordpress.org/trunk@27698


git-svn-id: http://core.svn.wordpress.org/trunk@27537 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-25 08:56:14 +00:00
Scott Taylor 0115ba2f30 When using `meta_query` in a `WP_Query`, passing `NOT EXISTS` or `''` to `compare` should not require `value` to be set. The resulting SQL should then produce the appropriate `OR` clause for existence of non-existence after passing the query to the `$key_only_queries` stack internally.
Adds unit tests. 

Props chrisguitarguy, for the original patch.
Fixes #23268.


Built from https://develop.svn.wordpress.org/trunk@27689


git-svn-id: http://core.svn.wordpress.org/trunk@27528 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-24 19:57:15 +00:00
Andrew Nacin 0e2a70e8f5 Return false from metadata_exists() if the get_$type_metadata filter returns a false value.
props xknown.
fixes #22746.

Built from https://develop.svn.wordpress.org/trunk@27562


git-svn-id: http://core.svn.wordpress.org/trunk@27405 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-03-17 19:40:16 +00:00
Sergey Biryukov ab8847316c Correct return values for update_metadata() and related functions.
fixes #21864.
Built from https://develop.svn.wordpress.org/trunk@27191


git-svn-id: http://core.svn.wordpress.org/trunk@27050 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2014-02-18 21:36:14 +00:00
Scott Taylor 05b22769e9 In `update_meta_cache()`, ensure that meta is always stored in the same order. Removes an unnecessary `$wpdb->prepare` statement. Adds unit test.
Props mattheu.
Fixes #25511.


Built from https://develop.svn.wordpress.org/trunk@26307


git-svn-id: http://core.svn.wordpress.org/trunk@26211 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-11-21 19:31:10 +00:00
Scott Taylor 53a2c3a181 Produce proper `CAST` for `DECIMAL` and `NUMERIC` in Meta Query. Adds a bunch of unit tests.
Props ericlewis.
Fixes #23033.


Built from https://develop.svn.wordpress.org/trunk@26055


git-svn-id: http://core.svn.wordpress.org/trunk@25980 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-11-08 23:11:08 +00:00
Scott Taylor 5129b9d0ff Respect the `compare` operator value in `meta_query` when `value` evaluates to `null`. Adds Unit Test.
Props bradyvercher, gradyetc.
Fixes #22967.


Built from https://develop.svn.wordpress.org/trunk@26053


git-svn-id: http://core.svn.wordpress.org/trunk@25978 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-11-08 22:52:08 +00:00
Andrew Nacin 4ea86c6b47 Return false in update_metadata() and update_metadata_by_mid() when the DB query fails.
props leewillis77.
fixes #24933.

Built from https://develop.svn.wordpress.org/trunk@25583


git-svn-id: http://core.svn.wordpress.org/trunk@25500 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-09-23 20:31:09 +00:00
Andrew Nacin d814ad50b3 Add REGEXP to meta queries.
"REGEXP is usually a terrible idea to use, but I see no reason to disallow it."

props wonderboymusic.
fixes #18736.

Built from https://develop.svn.wordpress.org/trunk@25525


git-svn-id: http://core.svn.wordpress.org/trunk@25445 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-09-20 20:13:09 +00:00
Scott Taylor 8038d7f9e8 Move `get_meta_type()` into the `WP_Meta_Query` class as `get_cast_for_type()`. `WP_Query` can then access it like: `$this->meta_query->get_cast_for_type()`.
See #21621, [25255].


Built from https://develop.svn.wordpress.org/trunk@25269


git-svn-id: http://core.svn.wordpress.org/trunk@25235 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-09-05 23:32:09 +00:00
Scott Taylor 4be84bbdfb When `meta_type` is passed with `orderby => meta_value`, `orderby` must also use `CAST()` to avoid scenarios like: `SELECT`ing by `UNSIGNED` and then ordering by `CHAR`. Adds unit test.
Fixes #21621.

Built from https://develop.svn.wordpress.org/trunk@25255


git-svn-id: http://core.svn.wordpress.org/trunk@25223 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-09-05 16:57:08 +00:00