Commit Graph

62 Commits

Author SHA1 Message Date
Helen Hou-Sandi
97d9557b3f Introduce an expanded meta registration API.
`register_meta()` has been altered to accept an array of arguments as the third parameter in order to support its usage beyond XML-RPC, notably in the REST API and other projects that may build on top of meta, such as a potential Fields API. Arguments are whitelisted to reserve the right for core to add more later.

New functions added to complement this expansion are:
* `registered_meta_key_exists()`
* `unregister_meta_key()`
* `get_registered_meta_keys()`
* `get_registered_metadata()`
* A "private" function for the aforementioned whitelisting.

There still need to be lots of tests written for previous and new behaviors, and many things are subject to change. Maybe things will explode. #yolo

props jeremyfelt, ericlewis, sc0ttkclark, helen, rmccue, ocean90, voldemortensen.
see #35658.


git-svn-id: https://develop.svn.wordpress.org/trunk@37924 602fd350-edb4-49c9-b593-d223f7449a82
2016-06-30 01:01:35 +00:00
Drew Jaynes
d11f7ed391 Docs: Standardize filter docs in remaining wp-includes/* files to use third-person singular verbs per the inline documentation standards for PHP.
See #36913.


git-svn-id: https://develop.svn.wordpress.org/trunk@37518 602fd350-edb4-49c9-b593-d223f7449a82
2016-05-22 18:49:05 +00:00
Drew Jaynes
cc4e2e3f64 Docs: Improve the DocBlock summary for wp_metadata_lazyloader(), introduced in [36566].
See #35816. See #35986.


git-svn-id: https://develop.svn.wordpress.org/trunk@36941 602fd350-edb4-49c9-b593-d223f7449a82
2016-03-10 17:50:01 +00:00
Boone Gorges
28fad09b61 More performance improvements to metadata lazyloading.
Comment and term meta lazyloading for `WP_Query` loops, introduced in 4.4,
depended on filter callback methods belonging to `WP_Query` objects. This meant
storing `WP_Query` objects in the `$wp_filter` global (via `add_filter()`),
requiring that PHP retain the objects in memory, even when the local variables
would typically be expunged during normal garbage collection. In cases where a
large number of `WP_Query` objects were instantiated on a single pageload,
and/or where the contents of the `WP_Query` objects were quite large, serious
performance issues could result.

We skirt this problem by moving metadata lazyloading out of `WP_Query`. The
new `WP_Metadata_Lazyloader` class acts as a lazyload queue. Query instances
register items whose metadata should be lazyloaded - such as post terms, or
comments - and a `WP_Metadata_Lazyloader` method will intercept comment and
term meta requests to perform the cache priming. Since `WP_Metadata_Lazyloader`
instances are far smaller than `WP_Query` (containing only object IDs), and
clean up after themselves far better than the previous `WP_Query` methods (bp
only running their callbacks a single time for a given set of queued objects),
the resource use is decreased dramatically.

See [36525] for an earlier step in this direction.

Props lpawlik, stevegrunwell, boonebgorges.
Fixes #35816.

git-svn-id: https://develop.svn.wordpress.org/trunk@36566 602fd350-edb4-49c9-b593-d223f7449a82
2016-02-17 22:57:33 +00:00
Boone Gorges
0ae22e5f4c In delete_metadata(), only invalidate cache for affected objects.
The `$delete_all` flag in `delete_metadata()` triggers cache invalidation for
multiple objects. Previously, invalidation took place for all objects matching
the `$meta_key` parameter, regardless of whether `$meta_value` was also set.
This resulted in overly aggressive invalidation.

Props rahal.aboulfeth.
Fixes #35797.

git-svn-id: https://develop.svn.wordpress.org/trunk@36511 602fd350-edb4-49c9-b593-d223f7449a82
2016-02-12 02:46:28 +00:00
Boone Gorges
71060260a1 Don't double-unslash meta key when update_metadata() falls back on add_metadata().
Props jdgrimes.
Fixes #35795.

git-svn-id: https://develop.svn.wordpress.org/trunk@36509 602fd350-edb4-49c9-b593-d223f7449a82
2016-02-11 17:34:59 +00:00
Boone Gorges
fdd7d91162 Simplify action placement in update_metadata().
By combining a number of `foreach` loops, we make the code more readable and
potentially faster in the case where many metadata rows are being updated.

Props Shelob9.
Fixes #35652.

git-svn-id: https://develop.svn.wordpress.org/trunk@36420 602fd350-edb4-49c9-b593-d223f7449a82
2016-01-29 04:51:11 +00:00
Sergey Biryukov
3e634c753e After [35718], update the location of some files in This filter is documented in docs.
Partially reverts [33954].

Fixes #33413.

git-svn-id: https://develop.svn.wordpress.org/trunk@35725 602fd350-edb4-49c9-b593-d223f7449a82
2015-11-22 03:50:32 +00:00
Andrew Nacin
8220d04e6d Simplify the include graph after work to split out classes.
see #33413. More details there.


git-svn-id: https://develop.svn.wordpress.org/trunk@35718 602fd350-edb4-49c9-b593-d223f7449a82
2015-11-20 07:23:04 +00:00
DrewAPicture
451534ad3b Docs: Clarify the file header summary for wp-includes/meta.php, the top-level file for the core Meta API.
Also adds inline DocBlocks for files broken out in #33413 and now brought in via `require_once()`.

See #33413. See #33701.


git-svn-id: https://develop.svn.wordpress.org/trunk@34407 602fd350-edb4-49c9-b593-d223f7449a82
2015-09-22 13:29:02 +00:00
Scott Taylor
46d0feea46 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.


git-svn-id: https://develop.svn.wordpress.org/trunk@33761 602fd350-edb4-49c9-b593-d223f7449a82
2015-08-26 13:01:22 +00:00
Drew Jaynes
ab8417702e Docs: Correct the phpDoc type to a boolean for the $single parameter in the get_{$meta_type}_metadata hook docs.
Props dlh.
Fixes #33451.


git-svn-id: https://develop.svn.wordpress.org/trunk@33665 602fd350-edb4-49c9-b593-d223f7449a82
2015-08-20 19:35:43 +00:00
Drew Jaynes
67698ae788 Fix inline documentation syntax in the DocBlock for WP_Meta_Query->has_or_relation(), added in 4.3.
See [32713]. See #32891.


git-svn-id: https://develop.svn.wordpress.org/trunk@33231 602fd350-edb4-49c9-b593-d223f7449a82
2015-07-13 21:43:05 +00:00
Boone Gorges
c04185a1f2 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.

git-svn-id: https://develop.svn.wordpress.org/trunk@32713 602fd350-edb4-49c9-b593-d223f7449a82
2015-06-09 17:41:35 +00:00
Scott Taylor
58f8af684d Fix doc blocks for meta.php
See #32444.


git-svn-id: https://develop.svn.wordpress.org/trunk@32610 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-26 19:32:55 +00:00
Boone Gorges
e5e467a41b 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.

git-svn-id: https://develop.svn.wordpress.org/trunk@32331 602fd350-edb4-49c9-b593-d223f7449a82
2015-05-01 16:37:35 +00:00
Drew Jaynes
8f8a9e7350 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.


git-svn-id: https://develop.svn.wordpress.org/trunk@32044 602fd350-edb4-49c9-b593-d223f7449a82
2015-04-05 16:10:53 +00:00
Boone Gorges
0f28011bcf 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.

git-svn-id: https://develop.svn.wordpress.org/trunk@31340 602fd350-edb4-49c9-b593-d223f7449a82
2015-02-05 19:37:47 +00:00
Boone Gorges
2d737796d2 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.

git-svn-id: https://develop.svn.wordpress.org/trunk@31312 602fd350-edb4-49c9-b593-d223f7449a82
2015-01-31 15:47:51 +00:00
Scott Taylor
5743898e1e @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.


git-svn-id: https://develop.svn.wordpress.org/trunk@31212 602fd350-edb4-49c9-b593-d223f7449a82
2015-01-16 19:02:26 +00:00
Scott Taylor
6fd11624d1 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.


git-svn-id: https://develop.svn.wordpress.org/trunk@31090 602fd350-edb4-49c9-b593-d223f7449a82
2015-01-08 07:04:40 +00:00
Scott Taylor
f6f12912e2 Improve some docs for @param. Remove an unneeded $wpdb global import.
See #30799.


git-svn-id: https://develop.svn.wordpress.org/trunk@30979 602fd350-edb4-49c9-b593-d223f7449a82
2014-12-20 20:55:21 +00:00
Boone Gorges
093de0f0be 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.

git-svn-id: https://develop.svn.wordpress.org/trunk@30846 602fd350-edb4-49c9-b593-d223f7449a82
2014-12-14 19:00:31 +00:00
Drew Jaynes (DrewAPicture)
7187da0b32 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.


git-svn-id: https://develop.svn.wordpress.org/trunk@30753 602fd350-edb4-49c9-b593-d223f7449a82
2014-12-06 21:23:52 +00:00
John Blackbourn
294b608879 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


git-svn-id: https://develop.svn.wordpress.org/trunk@30701 602fd350-edb4-49c9-b593-d223f7449a82
2014-12-02 03:34:13 +00:00
Scott Taylor
0632a3de68 Improve various @param docs.
See #30224.


git-svn-id: https://develop.svn.wordpress.org/trunk@30674 602fd350-edb4-49c9-b593-d223f7449a82
2014-11-30 23:23:37 +00:00
Drew Jaynes (DrewAPicture)
e8bc58459e 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.


git-svn-id: https://develop.svn.wordpress.org/trunk@30655 602fd350-edb4-49c9-b593-d223f7449a82
2014-11-30 12:02:44 +00:00
Drew Jaynes (DrewAPicture)
c664bd6a58 4.1 Docs Audit: Improve inline documentation for various WP_Meta_Query methods introduced or modified in 4.1.
See #30469.


git-svn-id: https://develop.svn.wordpress.org/trunk@30617 602fd350-edb4-49c9-b593-d223f7449a82
2014-11-28 12:01:21 +00:00
Scott Taylor
64f773e4da In WP_Meta_Query->get_sql_for_clause(), the empty initialization of $where is dead code and can be removed.
See #30224.


git-svn-id: https://develop.svn.wordpress.org/trunk@30163 602fd350-edb4-49c9-b593-d223f7449a82
2014-11-01 22:02:48 +00:00
Drew Jaynes (DrewAPicture)
43b3515501 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.


git-svn-id: https://develop.svn.wordpress.org/trunk@30149 602fd350-edb4-49c9-b593-d223f7449a82
2014-11-01 04:17:28 +00:00
Boone Gorges
8dbaaf9927 Pass all updated meta IDs to filters in update_metadata().
Props wonderboymusic.
Fixes #11683.

git-svn-id: https://develop.svn.wordpress.org/trunk@30140 602fd350-edb4-49c9-b593-d223f7449a82
2014-11-01 02:38:19 +00:00
Drew Jaynes (DrewAPicture)
7cd15026bd Correct references of @uses $wpdb in core documentation to use @global.
See #30191, [30105].
Fixes #30217.


git-svn-id: https://develop.svn.wordpress.org/trunk@30122 602fd350-edb4-49c9-b593-d223f7449a82
2014-10-31 17:55:39 +00:00
Boone Gorges
9a84da90c3 Unserialize get_metadata() results when 'key' is omitted.
Props mattkeys, nacin.
Fixes #15030.

git-svn-id: https://develop.svn.wordpress.org/trunk@30115 602fd350-edb4-49c9-b593-d223f7449a82
2014-10-30 10:24:22 +00:00
Drew Jaynes (DrewAPicture)
3cc10d77a0 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.


git-svn-id: https://develop.svn.wordpress.org/trunk@30105 602fd350-edb4-49c9-b593-d223f7449a82
2014-10-30 01:04:55 +00:00
Boone Gorges
91733ae919 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.

git-svn-id: https://develop.svn.wordpress.org/trunk@29964 602fd350-edb4-49c9-b593-d223f7449a82
2014-10-19 18:53:55 +00:00
Boone Gorges
17183e4e71 Remove redundant table alias check in WP_Meta_Query.
Also adds documentation for 'meta_query_find_compatible_table_alias' filter.

See #24093.

git-svn-id: https://develop.svn.wordpress.org/trunk@29953 602fd350-edb4-49c9-b593-d223f7449a82
2014-10-18 02:21:33 +00:00
Boone Gorges
4c544151b2 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.

git-svn-id: https://develop.svn.wordpress.org/trunk@29941 602fd350-edb4-49c9-b593-d223f7449a82
2014-10-17 20:24:57 +00:00
Boone Gorges
1708a580fd 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.

git-svn-id: https://develop.svn.wordpress.org/trunk@29940 602fd350-edb4-49c9-b593-d223f7449a82
2014-10-17 20:20:04 +00:00
Boone Gorges
40dc982a30 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.

git-svn-id: https://develop.svn.wordpress.org/trunk@29890 602fd350-edb4-49c9-b593-d223f7449a82
2014-10-14 02:16:28 +00:00
Boone Gorges
0b05366c6f 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.

git-svn-id: https://develop.svn.wordpress.org/trunk@29887 602fd350-edb4-49c9-b593-d223f7449a82
2014-10-13 22:02:18 +00:00
Andrew Nacin
7c145e0bd9 Meta Query: Revert [28659] (and [28665]) due to regressions.
props boonebgorges.
fixes #29285. see #25538.


git-svn-id: https://develop.svn.wordpress.org/trunk@29650 602fd350-edb4-49c9-b593-d223f7449a82
2014-08-27 20:22:35 +00:00
Scott Taylor
e9ba499f23 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.


git-svn-id: https://develop.svn.wordpress.org/trunk@29421 602fd350-edb4-49c9-b593-d223f7449a82
2014-08-06 22:07:42 +00:00
Scott Taylor
5686f4511a Bail on update_user_meta() when $object_id is non-numeric.
Adds unit test.

Props jacklenox, wonderboymusic.
Fixes #28315.


git-svn-id: https://develop.svn.wordpress.org/trunk@29339 602fd350-edb4-49c9-b593-d223f7449a82
2014-08-01 17:09:53 +00:00
Scott Taylor
84ad12b439 Replace all uses of like_escape() with $wpdb->esc_like().
Props miqrogroove.
See #10041.


git-svn-id: https://develop.svn.wordpress.org/trunk@28712 602fd350-edb4-49c9-b593-d223f7449a82
2014-06-10 00:43:32 +00:00
Scott Taylor
577d223715 Wrap individual meta query WHERE clases in parens, missed in 28659.
Props boonebgorges.
Fixes #25538.



git-svn-id: https://develop.svn.wordpress.org/trunk@28665 602fd350-edb4-49c9-b593-d223f7449a82
2014-06-04 18:20:59 +00:00
Scott Taylor
1ffe74ad6f 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.



git-svn-id: https://develop.svn.wordpress.org/trunk@28659 602fd350-edb4-49c9-b593-d223f7449a82
2014-06-04 05:47:19 +00:00
Scott Taylor
5771dfbfa5 Add missing access modifiers to methods in WP_Meta_Query.
See #27881, #22234.


git-svn-id: https://develop.svn.wordpress.org/trunk@28522 602fd350-edb4-49c9-b593-d223f7449a82
2014-05-19 06:34:01 +00:00
Scott Taylor
24b03d819b In update_metadata_by_mid(), $original_value is unused.
See #27882.


git-svn-id: https://develop.svn.wordpress.org/trunk@28328 602fd350-edb4-49c9-b593-d223f7449a82
2014-05-06 21:28:02 +00:00
Drew Jaynes (DrewAPicture)
9215e9f5ab Fix a typo in the deleted_{$meta_type}_meta hook description.
Props aliso.
Fixes #25826.


git-svn-id: https://develop.svn.wordpress.org/trunk@27723 602fd350-edb4-49c9-b593-d223f7449a82
2014-03-25 20:33:21 +00:00
Drew Jaynes (DrewAPicture)
52a57b9f43 Inline documentation for hooks in wp-includes/meta.php.
Props raamdev and kpdesign.
Fixes #25826.


git-svn-id: https://develop.svn.wordpress.org/trunk@27698 602fd350-edb4-49c9-b593-d223f7449a82
2014-03-25 08:55:44 +00:00