[wp-hackers] Avoiding option cacheing for a specific option

Bart Schouten lists at xenhideout.nl
Sat Sep 20 22:14:11 UTC 2014


Generally speaking, seeing that there are two obvious places:

- either in the option handling routines
- or in the caching routines themselves.

You would think that the option layer would be most suitable since it is 
the calling agent, BUT, there are many routines and many of them can call 
wp_cache_set() (or wp_cache_add() ) under various circumstances.

Then the caching functionality itself becomes the proper place to 
filter... and the only thing that makes sense to me is to add a filter to:

WP_Object_Cache->set();

On the other hand, that would filter everything, not only options. Perhaps 
the only places where a new option is added is add_option and 
update_option. Then you only need to add a filter on the option name. 
There are already various filters on the option /value/ but nothing on the 
option /name/ and filtering on the value itself (you could set it to zero, 
or null) does not really semantically coincide with not wanting to set any 
value at all.

Also, there seems to be a remnant of a named filter:

$value = apply_filters( 'pre_update_option_' . $option, $value, $old_value 
);

which probably should have been

$value = apply_filters( "pre_update_option_{$option}", $value, $old_value 
);

Oh, apologies, I'm misreading. The code further down uses this latter 
syntax instead of the existing.... they are the same :p.

But I don't think you can really use that to filter the option itself. If 
you set it to null, it will just still get set, it's just getting set to 
null and retrieved as null. PHP isset() does not coincide with is_null(). 
Or "=== null". So it won't work.

So my input here would be to add a filter next to these pre_update_option 
filters called pre_update... something. On the other hand, if the option 
does not in fact exist, add_option is still called.

Then you just need to add two filters, probably, to remain with the 
current design, one general one and one named one, to add_option.

Regards,

Bart.

ps. when I wrote this I didn't much think about why you would need it. But 
I'm not sure you are referring to in-memory database-caching. There is 
also another form of caching that is sometimes used, which is storing 
calculated results as options in the option db. This form of caching can 
invalidate, so to speak, the current database contents because the 
existing 'cache' will supersede getting new results from the db. This 
makes it hard to e.g. manually change certain things such as categories in 
the DB, because category hierarchy-lists get cached and you will see like 
corrupted category lists all over WordPress. But this form of caching is 
persistent, not temporary or transient.

If, in fact, your options are getting changed from outside of WP or 
through some other means than the regular WP calls, I guess the regular 
in-memory caching could also be a problem...



On Sat, 20 Sep 2014, David Anderson wrote:

> Hi,
>
> Where in WP core is the architecturally correct place to make sure that a 
> specific option is never cached?
>
> I'm not asking about how to do this via a plugin - I'm working on a patch to 
> do with an issue caused by cacheing an option that would just be better never 
> cached.
>
> Best wishes,
> David
>
> -- 
> UpdraftPlus - best WordPress backups - http://updraftplus.com
> WordShell - WordPress fast from the CLI - http://wordshell.net
>
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers
>


More information about the wp-hackers mailing list