[wp-trac] [WordPress Trac] #44467: Ensure meta wrapper functions do not contain additional logic
WordPress Trac
noreply at wordpress.org
Tue Jun 26 17:09:30 UTC 2018
#44467: Ensure meta wrapper functions do not contain additional logic
---------------------------------+-----------------------------
Reporter: flixos90 | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Options, Meta APIs | Version:
Severity: normal | Keywords: 2nd-opinion
Focuses: multisite, rest-api |
---------------------------------+-----------------------------
WordPress contains numerous wrapper functions for metadata that wrap the
respective `add_metadata()` / `update_metadata()` / `get_metadata()` /
`delete_metadata()` calls.
Those are:
* `*_post_meta()`
* `*_term_meta()`
* `*_comment_meta()`
* `*_user_meta()`
* `*_site_meta()` (on multisite)
These are convenience wrappers that developers are encouraged to use in
favor of the more low-level functions. However, it has become more and
more common to also include small pieces of additional logic in the
wrapper functions that will not be executed when calling the low-level
functions. This is a problem, because the low-level functions are still
called in numerous locations in core and also by plugins (usually by areas
that deal with metadata in a more abstract way). Particularly, the REST
API meta field classes make use of them, so here it becomes a significant
problem already. This means that in those cases, crucial functionality
does not get executed, for example preventing access in case of an old
database version or clearing the cache. Therefore my suggestion is to
remove all extra logic from all wrapper functions and instead run it via
filters that become part of `default-filters.php`. This ensures
consistency for all metadata functions and their wrappers.
The following list shows all extra functionality that meta wrapper
functions in core currently contain:
* The writing post meta wrappers all ensure the metadata is only changed
for the root post (not for a revision), and they all clear the cache for
the respective post ID.
* All term meta wrappers prevent access to the function if the database
schema is too old. The writing term meta functions furthermore all clear
the cache for the respective term ID.
* The writing comment meta wrappers all clear the cache for the respective
comment ID.
* All site meta wrappers prevent access to the function if the database
schema is too old. The writing site meta functions furthermore all clear
the cache for the respective site ID.
All of the above, except for the post revision bit, could easily become a
filter or action hook:
* Checks that possibly prevent access to metadata functions can use the
`add_{$type}_metadata`, `update_{$type}_metadata` and
`delete_{$type}_metadata` filters.
* Caches for the respective objects can be cleared by using the
`added_{$type}_meta`, `updated_{$type}_meta` and `deleted_{$type}_meta`
actions.
--
Ticket URL: <https://core.trac.wordpress.org/ticket/44467>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list