所以我用的是$wp_customize
要更改主题中的许多内容,因此我想为生成的CSS设置一个过渡。我正在试图找到一个不会缓存临时结果的流,当用户使用设置并点击“取消”时,就会发生这种情况-这些结果仍在缓存中!
现在,我有一个老套的方法来设置瞬变生命只有1秒,但我觉得一定有更好的钩子或东西可以抓住。下面是我现在的基本流程:
add_action( \'customize_register\', array( $this, \'customize_register\' ) );
add_action( \'wp_head\', array( $this, \'display_css_output\' ), 99 );
add_action( \'customize_preview_init\', array( $this, \'css_cache_reset\' ) );
customize_register
负责所有设置。
function display_css_output( $short_life = 0 ) {
$html = get_transient( \'my_custom_styles\' );
if ( empty( $html ) ) {
$html = $this->generate_css_output();
set_transient(
\'my_custom_styles\',
$html,
( $short_life == 0 ? DAY_IN_SECONDS * 2 : 1 )
);
}
echo $html;
}
如果它的集合或其他经历了生成样式的漫长过程,那么它将捕获瞬态。这也是我试图阻止瞬变持续的尝试,
$short_life
这将在稍后对该函数的另一次调用中包含。
function css_cache_reset() {
delete_transient( \'my_custom_styles\' );
$this->display_css_output( $short_life = 1 );
}
存在delete事件和调用,使瞬态仅持续1秒。
当然有更好的方法吗?
最合适的回答,由SO网友:GhostToast 整理而成
这似乎可行,修改display_css_output()
以这种方式:
function display_css_output() {
$html = get_transient( \'my_custom_styles\' );
if ( empty( $html ) ) {
$html = $this->generate_css_output();
global $wp_customize;
if ( ! isset( $wp_customize ) ) {
set_transient( \'my_custom_styles\', $html, DAY_IN_SECONDS );
}
}
echo $html;
}
$short_life
不再需要。基本上检查一下
$wp_customize
已设置,则无需设置瞬态。