WordPress将瞬态存储在数据库的选项表或全局wp\\u object\\u cache对象中,这需要键值后端(感谢Rarst的澄清)。它首先检测是否存在缓存对象,如果存在,则使用该对象。如果缓存对象不存在,则它会返回到数据库。
在不知道是否启用的情况下,我们不知道WordPress将在哪里存储瞬态。在很多情况下,这并不重要,但如果您想像现在这样获得所有带有前缀的瞬态,这可能会很困难。如果您知道瞬态存储在数据库中,那么构造一个SQL查询来获取瞬态就很简单了。问题在于缓存对象。
一种解决方案是将所有主题/插件瞬态存储在一个数组中。然后使用WordPress transients API将值存储在数据库或对象缓存中。
包装器类
/**
* Class to store all theme/plugin transients as an array in one WordPress transient
**/
class wpse_174330_transient {
protected $name;
protected $transient;
public function __construct( $name ){
$this->name;
$this->transient = ( false !== ( $t = get_transient( $name ) ) ) ? $t : [];
}
public function all(){
return $this->transient;
}
public function flush(){
$this->transient = [];
delete_transient( $this->name );
}
public function set( $transient, $value, $expiration = \'\' ){
$this->transient[ $transient ] = $value;
$this->update();
}
public function get( $transient ){
return isset( $this->transient[ $transient ] ) ?
$this->transient[ $transient ] : false;
}
public function delete( $transient ){
unset( $this->transient[ $transient ] );
return $this>update();
}
protected function update(){
return set_transient( $this->name, $this->transient );
}
}
用法
$theme_transients = new wpse_174330_transient( \'wpse_174330\' );
$theme_transients->set( \'header_color\', \'blue\' );
$theme_transients->get( \'footer_color\' );
//* Delete all the transients
foreach( $theme_transients->all() as $name => $value ){
$theme_transients->delete( $name );
}
//* Flush \'em
$theme_transients->flush();