设置Cookie时禁用WP超级缓存

时间:2017-02-06 11:48:31

标签: php wordpress caching cookies

我有一个WordPress网站,其中包含由第三方服务管理的登录信息。当用户通过此服务登录时,会设置cookie。

当用户登录(cookie集)时,我不希望使用WP Super Cache缓存该页面。我知道我可以使用define('DONOTCACHEPAGE',TRUE);但是如何在设置第三方cookie时尽早设置(最好在functions.php中)?

我尝试了一个' init'钩子,但这不会在缓存页面上调用(我假设这只是直接从.html加载)。

function disable_super_cache() {
  die("Cookie Logic");
  //define(‘DONOTCACHEPAGE’, TRUE);
}

add_action('init', 'disable_super_cache', 9999);

如何尽早设置?

更新

我意识到我是从错误的角度看待这个。我不需要将常量设置为动作,因为它只需要尽早设置。我目前最接近的工作是wp-config.php中的以下内容(因为甚至在root functions.php逻辑之前调用了Super Cache)。但这似乎是一个大规模的解决方案,欢迎更好的建议。

/**
 * Disable WP Super Cache when a user is logged in 
 */

if( isset( $_COOKIE['LoggedInCookie'] ) ){
    $_GET['donotcachepage'] = '{secret}';
    //define( 'DONOTCACHEPAGE', 1 ) // Doesn't stop caching even in wp-config.php, bug in WP-Super-Cache??;
}

1 个答案:

答案 0 :(得分:3)

好了一段时间后,似乎我不会在这里得到答案,所以我认为最好发布尽可能接近的答案。我有2个解决方案,一个直接回答我的问题,但感觉有点hacky,另一个是更有效的解决方法。

理想情况下,应该有一个常量/变量来停止缓存,即使页面已经被缓存了。 ' DONOTCACHEPAGE'只有在尚未缓存的页面停止时才会停止缓存。

解决方案1(来自问题)

这会手动强制$ _GET [' donotcachepage']变量。虽然这对我来说似乎有些苛刻,但它确实有用。

/**
 * Disable WP Super Cache when a user is logged in 
 */

if( isset( $_COOKIE['LoggedInCookie'] ) ){
    $_GET['donotcachepage'] = '{secret}';
    //define( 'DONOTCACHEPAGE', 1 ) // Doesn't stop caching even in wp-config.php, bug in WP-Super-Cache??;
}

解决方案2

在WP Super Cache高级设置中,有一个名为'不为已知用户缓存页面的设置。 (推荐)&#39 ;.当用户登录WordPress时,它基本上会停止缓存。

当用户使用WordPress登录时,会设置名为' wordpress_logged_in_ {hash}'的Cookie。由于我的应用程序没有将用户登录到WordPress,我们可以通过设置具有相似名称的cookie来创建相同的效果,在我的情况下,我设置了#wordpress_logged_in_nocache'。这让WP Super Cache误以为用户已登录,因此它不再缓存启用了上述设置的页面。

第二个解决方案并没有直接回答我的问题,但是如果我将cookie更改为上面的,我会得到相同的结果。解决方案2对我来说感觉更稳定。所以我建议那样。