[wp-trac] [WordPress Trac] #39286: Standardizing actions and filters for adding, getting, setting, updating, and deleting options and transients
WordPress Trac
noreply at wordpress.org
Wed Dec 14 21:46:10 UTC 2016
#39286: Standardizing actions and filters for adding, getting, setting, updating,
and deleting options and transients
--------------------------------+-----------------------------
Reporter: NathanAtmoz | Owner:
Type: enhancement | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Options, Meta APIs | Version:
Severity: normal | Keywords:
Focuses: |
--------------------------------+-----------------------------
== The Problem ==
In a nutshell, the problem is that there is no standardization of hooks
surrounding the options and transient APIs and the hooks presently
available are inconsistent in their terminology.
=== Issue 1: Add Option ===
When adding an option to the database, there are presently 3 hook
available:
* `add_option`
* `add_option_{$option}`
* `added_option`
There are two main points of confusion:
* The first point of confusion is that `add_option` is fired before the
option is added to the database, but `add_option_{$option}` is fired after
the option is added.
* The second is that prior to the option being added to the database,
there is a hook available that will fire anytime an option is added, while
there are two hooks fired after the option is added. There is no hook
available prior to the option being added to the database that fires for
the specific `$option`.
These same two issues are present for updating and deleting options.
=== Issue 2: Get Option ===
When getting an option from the database, there are only two hooks fired:
* `pre_option_{$option}`
* `option_{$option}`
The first is fired before the option is getted from the database and the
second after. The problems are that:
* Unlike adding, updating, and deleting, there is no verb in this hook to
tell what is being done
* There are no hooks that fire for every option getted from the database
=== Issue 3: Delete Transient ===
Transients are sort of like options. Without an external object cache,
WordPress stores them in the options table of the database. It would make
sense that the hooks available for transients are consistent with those
available for options. If we look at deleting a transient, there are two
hooks available:
* `delete_transient_{$transient}`
* `deleted_transient`
( The same issues are present with site transients. )
Remembering issue 1 above, there are presently three hooks available when
deleting and option.
* `delete_option`
* `delete_option_{$option}`
* `deleted_option`
There are a couple issues:
* There is no hook present that will fire every time a transient is
deleted, either before or after
* The `delete_transient_{$transient}` is fired BEFORE the transient is
deleted in contrast with the `delete_option_{$option}` hook which is fired
AFTER the option is deleted.
=== Issue 4: Pre ===
Prior to getting and setting transients, the hooks all start with `pre_`.
But this prefix is used inconsistently throughout.
* It is not used prior to deleting the transient
* It is used prior to getting an option, but not prior to adding, updating
or deleting
== Proposal ==
=== Structure of hooks ===
I would like to propose that there be four hooks for each action: two
before and two after, one general and one specific. The general structure
would look like so:
{{{
"pre_{present-tense-verb}_{noun}"
"pre_{present-tense-verb}_{noun}_{$variable}"
[verb noun]
"{past-tense-verb}_{noun}_{$variable}"
"{past-tense-verb}_{noun}"
}}}
So for instance, adding an option would look like:
{{{
"pre_add_option"
"pre_add_option_{$variable}"
[add option]
"added_option_{$variable}"
"added_option"
}}}
=== Type of hook ===
Prior to adding, setting, or updating options/transients, the hooks should
be a filter to allow changing of the option/transient prior to writing to
the database. After adding, setting, or updating the hooks should be an
action since the write has already occurred.
Both prior and after getting an option/transient, the hook should be a
filter. I'm not sure the use case for filtering the option before running
the query, but that's what's presently done.
Before and after the option is deleted the hook should be an action as
there's no need to change the value of the option since it's being deleted
anyway.
=== Deprecating hooks ===
There are several hooks no present that don't fit the proposed structure
above. I suggest these hooks continue to work for backward compatibility,
but that they be deprecated.
=== See also ===
[https://docs.google.com/document/d/1Zl7SuBJTWY8oWvWP6p4QuDmOCowuuqKHtmnmmlhasBI
Google Doc] showing all the new and deprecated hooks
== Related Tickets ==
* #37928
* #37929
* #37930
--
Ticket URL: <https://core.trac.wordpress.org/ticket/39286>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list