Я придумал временное решение для не совсем распространенной, но далеко не беспрецедентной проблемы взаимодействия популярных решений для кэширования WP с файлами cookie, в данном случае стандартными файлами cookie комментариев WP. Мое решение также опирается на редко четко определенное исключение «известных пользователей» для обслуживания кэшированных файлов. Подходит ли это для использования или нет, я полагаю, что объяснение этого и, возможно, выяснение, почему это плохая идея, может быть в целом поучительным.
Я протестировал свой метод с использованием WP Super Cache, W3 Total Cache и Comet Cache. При изучении этой проблемы я подробно остановился на WP Super Cache (далее «WPSC»), поэтому я буду использовать его в качестве основного примера.
ЗАДНИЙ ПЛАН
Когда стандартная ветка комментариев WP настроена так, чтобы посетители могли комментировать, куки-файлы комментариев устанавливаются для любого комментатора, который не является зарегистрированным пользователем и вошел в систему, с фактическими правами на комментирование, подлежащими дальнейшей проверке. В том, что я считаю наиболее распространенной конфигурацией, комментатор должен предоставить только имя и адрес электронной почты. Они хранятся в двух куки браузера, как правило comment_author_ . COOKIEHASH
, и comment_author_email_ . COOKIEHASH
. COOKIEHASH
определяется в соответствии с параметрами пользователя.
Если установлено, чтобы доставлять только что сгенерированные файлы «известным пользователям», WPSC определяет, следует ли обслуживать кэшированный файл, на основе нескольких проверок: вошедшие в систему пользователи получают свежие файлы, и посетители - «кто может комментировать». Последние в основном идентифицируются по наличию в их браузерах comment_author_
файлов cookie, которые конкретно или однозначно не идентифицируются для конкретного пользователя COOKIEHASH
(обычно, но не всегда, в кодировке MD5 версии «siteurl», записанной в опциях сайта).
То, что является ключевой частью кода WPSC, из wp-cache-phase1.php LL371-383, использует шаблон RegEx для получения строки, циклически перебирающей файлы cookie:
$regex = "/^wp-postpass|^comment_author_";
if ( defined( 'LOGGED_IN_COOKIE' ) )
$regex .= "|^" . preg_quote( constant( 'LOGGED_IN_COOKIE' ) );
else
$regex .= "|^wordpress_logged_in_";
$regex .= "/";
while ($key = key($_COOKIE)) {
if ( preg_match( $regex, $key ) ) {
wp_cache_debug( "wp_cache_get_cookies_values: $regex Cookie detected: $key", 5 );
$string .= $_COOKIE[ $key ] . ",";
}
next($_COOKIE);
}
Теперь, если бы я работал строго на PHP, я мог бы заново создать или подключиться к основным функциям WP, и получить нормальный comment_author_ . COOKIEHASH
набор с помощью шаблона комментариев, но я работаю в jQuery с помощью подключаемого модуля jQuery Cookie. Однако, как вы можете видеть, если вы посмотрите на RegEx, функция WPSC не заботится о COOKIEHASH
: Она удовлетворена, если встретится comment_author_
.
МОЕ ТЕНТАТИВНОЕ РЕШЕНИЕ
$.cookie( 'comment_author_proxyhash', 'proxy_author', { path: '/' } );
Для тех, кто не знаком с jQuery Cookie: вышеприведенное устанавливает простой сессионный cookie с ключом = comment_author_proxyhash
и значением = proxy_author
, который подходит для всего сайта. (Кроме того, для тех, кто использует jQuery Cookie и WP, в дополнение к предварительной замене привычного jQuery $
для WP jQuery
, я также уже установил $.cookie.raw = true;
.)
Я добавил строку в свой скрипт jQuery и, вуаля! WPSC, W3 Total Cache и Comet Cache ведут себя так, как я хочу. После того, как я использую скрипт и перезагружаюсь, я получаю свежие страницы. Если мне удастся разместить реальный комментарий, то будут установлены нормальный файл comment_author_
и comment_author_email_
файлы cookie, и, похоже, с сосуществованием проблем не возникнет.
Возможно, одним из недостатков будет то, что cookie-файл «proxyhash» будет перемещаться вместе с пользователем, пока он или она держит сеанс открытым, но это не кажется мне серьезной проблемой - или даже стоит предупреждения. Я, конечно, никогда не слышал, чтобы кто-то жаловался на то, что такое происходит с одним из обычных файлов cookie.
Но, может быть, я чего-то упускаю и собираюсь открыть многое для моего горя, если не для моего назидания. Или, может быть, у меня есть относительно простой наилучший способ репликации COOKIEHASH
в jQuery, также охватывающий альтернативные варианты использования ... или для достижения того же конечного эффекта с помощью других средств - других способов заставить подключаемые модули кэширования обращаться с посетителем как комментатор ...
Если нет, есть ли веская причина НЕ выдвигать это или что-то похожее на вселенную в плагине?
wp_localize_script
для передачи хеша cookie в ваш Javascript, чтобы вы могли использовать «родной» cookie вместо прокси-хеша. В противном случае это очень интересная проблема, и ваше решение кажется надежным, хотя куки + кэш всегда настолько сложны, что трудно сказать, является ли это «правильным» решением или что-то упускается. Отличное исследование!