Я придумав попереднє рішення для не зовсім поширеної, але далеко небаченої проблеми взаємодії популярних WP-кеш-рішень із файлами cookie, в цьому випадку стандартними файлами cookie-коментарів WP. Моє рішення також стосується рідко чітко визначених "відомих користувачів" винятків із обслуговування кешованих файлів. Будь-то це корисно чи ні, я вважаю, що пояснення цього та, можливо, навчання, чому це погана ідея, може бути загалом повчальним.
Я перевірив свій метод з кешуванням WP Super Cache, W3 Total Cache та Comet Cache. Та, яку я детально розбив для себе під час вивчення цієї проблеми, був WP Super Cache (далі "WPSC"), тому я буду використовувати його як основний приклад.
Передумови
Якщо стандартний потік коментарів WP встановлений для того, щоб відвідувачі могли коментувати, cookie-коментарі встановлюються для будь-якого коментатора, який не є зареєстрованим користувачем та увійшов у систему, з фактичними правами коментування, які піддаються подальшій перевірці. В моїй думці, це найпоширеніша конфігурація, коментатору потрібно вказати лише ім’я та адресу електронної пошти. Зазвичай вони зберігаються в межах двох файлів cookie браузера 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: '/' } );
Для тих, хто не знає файлу cookie jQuery: вищенаведене встановлює простий cookie сеансу з ключем = comment_author_proxyhash
та value = proxy_author
, добре для всього сайту. (Також для тих, хто використовує файли cookie jQuery та WP, крім попередньої заміни звичного jQuery $
на WP jQuery
, я вже встановив $.cookie.raw = true;
.)
Я додав рядок до свого сценарію jQuery і, voila! , WPSC, W3 Total Cache та Comet Cache діють так, як я хочу. Після використання сценарію та перезавантаження я отримую нові сторінки. Якщо я випадково розміщую справжній коментар, встановлюються нормальні comment_author_
та comment_author_email_
файли cookie, і, схоже, не виникає проблем із співіснуванням.
Можливо, одним із дефектів буде те, що cookie "proxyhash" буде подорожувати з користувачем до тих пір, поки він або вона буде тримати сеанс відкритим, але це не вражає мене, як ймовірно, головної проблеми - або навіть варто застерегти. Я, звичайно, ніколи не чув, щоб хтось скаржився на таке, що відбувається з одним із звичайних файлів cookie.
Але, можливо, є щось, чого мені не вистачає, і я збираюсь відкрити багато свого нещастя, якщо, можливо, і моє зведення. А може, для мене є відносно простий спосіб найкращої реплікації COOKIEHASH
в jQuery, який також охоплює випадки альтернативного використання ... або досягти такого ж кінцевого ефекту іншими способами - іншими способами введення плагінів кешування для лікування відвідувача як коментатор ...
Якщо ні, чи є якась вагома причина НЕ виштовхувати це чи щось наближене до Всесвіту в плагіні?
wp_localize_script
передати хеш-файли cookie у свій Javascript, щоб ви могли використовувати "нативне" cookie замість proxyhash. В іншому випадку це дуже цікаве питання, і ваше рішення здається надійним, хоча файли cookie + кеш завжди такі складні, що важко сказати, чи це "правильне" рішення, чи щось пропущено. Прекрасне дослідження!