2017-02-06 4 views
0

У меня есть сайт WordPress, у которого есть логин, управляемый сторонним сервисом. Когда пользователь регистрируется этой службой, устанавливается cookie.Отключить WP Super Cache Когда установлен Cookie

Когда пользователь вошел в систему (набор файлов cookie), я не хочу, чтобы страница была кэширована с использованием WP Super Cache. Я знаю, что могу использовать define ('DONOTCACHEPAGE', TRUE); но как мне установить это достаточно рано (желательно в functions.php), когда установлен файл cookie третьей стороны?

Я пробовал крюк «init», но это не вызывается на кешированной странице (я предполагаю, что это просто загружается из .html напрямую).

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

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

Как я могу установить это достаточно рано?

UPDATE

Я понял, что я смотрел на это с неправильным углом. Мне не нужно устанавливать константу как действие, так как ее нужно как можно скорее установить. Ближайшим я сейчас работаю в wp-config.php (так как Super Cache вызывается еще до корневой функции functions.php). Но это похоже на массовое обходное решение, и лучшие предложения будут приветствоваться.

/** 
* 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??; 
} 
+0

Прошли ли вы через API и проверили все действия? https://codex.wordpress.org/Plugin_API/Action_Reference –

+0

@PeterFeatherstone да, я просто попробовал все из них «init» и не повезло. Я думаю, что я могу попробовать отредактировать «wp-cache-config.php», чтобы добавить в функцию ... – alexmcfarlane

ответ

1

OK после того, как некоторое время не кажется, что я иду, чтобы получить ответ здесь, так что я подумал, что было бы лучше, чтобы получить возможность отправлять так близко, как я был в состоянии получить. У меня есть 2 решения, один отвечает на мой вопрос напрямую, но немного взломан, а другой - более подходящий способ обхода.

В идеале должна быть константа/переменная, которая останавливает кеширование, даже если страница уже была кеширована. «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, есть параметр называется «Не кэшировать страницы для известных пользователей. (Рекомендуемые)'. Он в основном останавливает кеширование при входе пользователя в WordPress.

Когда пользователь регистрируется в WordPress, cookie устанавливается под именем «wordpress_logged_in_ {hash}». Поскольку мое приложение не регистрирует пользователя в WordPress, мы можем создать тот же эффект, установив файл cookie с похожим именем, в моем случае я установил 'wordpress_logged_in_nocache'. Этот дурак WP Super Cache в виду, что пользователь зарегистрирован, поэтому он больше не кэширует страницу с включенным выше параметром.

Второе решение на самом деле не отвечает на мой вопрос напрямую, но если я изменю cookie на выше, то получаю тот же результат. Решение 2 кажется мне более стабильным. Поэтому я бы рекомендовал это.

 Смежные вопросы

  • Нет связанных вопросов^_^