jQuery: решение проблемы с куками на WordPress при использовании MaxCache
Этот пост адресован пользователям WordPress, у которых стоит кэширование с помощь MaxCache. WordPress имеет в своем функционале две очень хорошие особенности, которые повышают юзабилити сайта для посетителей, оставляющих комментарии: Однажды оставив одобренный администратором сайта комментарий, посетитель избавляется от необходимости при каждом следующем комментарии вновь вводить ...
Комментарии (75)
Огромное спасибо, Димокс! В закладки и блог-шоу однозначно!
Пожалуйста, Миша ;)
Большое спасибо!
И проблема решена важная и статья познавательная.
Дима, я так подумал, наверное всё-таки правильней в форме прицепиться не к id, а к name. В WordPress’е эти name стандартные, а id, как ты и написал, могут меняться. Так что переход к name гарантирует работу (заполнение полей) с любым шаблоном.
Точно! Как же я об этом не подумал? Привык всегда цепляться за id =) Спасибо, Макс, за подсказку! Внесу поправки.
Ура, данные сохраняются :)
Хм, только что-то после добавки предыдущего коммента моё имя само изменилось сами видите на что.
Странненько… я сколько тестировал, все нормально было.
Я вот глянул, а оно будет куки в днях хранить? Может было бы лучше в Unix?
Что значит «в Unix»?
Чтобы писать $, а не $j
Можно весь свой скрипт обернуть в такую конструкцию, это самый правильный вариан:
(function ($){
здесь ваш скрипт…
})(jQuery);
Это гарантирует отстутствие конфликтов с другими фреймворками?
Да
Спасибо Dimox огромное, давно искал +один подписчик
Тоже кириллические имена сохраняются как смайлики.
Да, есть такая проблема. Пока не знаю, как решить.
У меня выскочила аналогичная проблема, Джаваскрипт вычитывает из куков не совсем так как хотелось бы. К примеру:
русс = %D1%80%D1%83%D1%81%D1%81;
unescape ('%D1%80%D1%83%D1%81%D1%81') = ÑÑÑÑ;
Решается проблема следующим методом:
В результате:
cookie.decode ('%D1%80%D1%83%D1%81%D1%81') = русс
Спасибо! В свободное время проверю и дополню пост.
Наконец-то я добрался. Попробовал прицепить ваш код к своему скрипту — ничего не изменилось. Непонятно, что я неправильно делаю…
cookie.decode () нужно применять при записи в куки или при чтении из кук?
При чтении из кук.
Я бы назвал все вышеизложенное «ПерАнусДерАстро» :-D
Все можно сделать гораздо проще.
1. Удалить из кеша страницу с комментарием, и для этого пользователя (однократно) вывести лайф версию.
2. Не писать новые свои куки, а взять родные которые создал Вердпресс, и джаваскриптом распихать в инпуты.
Таким образом не придется править код при обновлении движка.
Пример скрипта который надо впихнуть в свой шаблон комментариев:
function searchCookie (name)
{
var cookie = «» + document. cookie;
var search = «» + name;
var setStr = null;
var offset = 0;
var end = 0;
if (cookie.length > 0) {
offset = cookie. indexOf (search);
if (offset ≠ -1) {
offset += search. length;
end = cookie. indexOf («;», offset)
if (end == -1) {
end = cookie. length;
}
setStr = cookie. substring (offset, end);
begin=setStr.indexOf ('=')+1;
setStr = unescape (setStr.substring (begin, setStr. length));
}
}
return (setStr);
}
function getToInput ()
{
var arg = getToInput. arguments;
if (!arg[0]) arg=new Array ('author','email','url');
if (document.cookie)
{
var commData=new Array (searchCookie ('comment_author'), searchCookie ('comment_author_email'), searchCookie ('comment_author_url'));
if (!commData.join ('')) return false;
for (i=0;i<3;i++)
{
obj=document.getElementById (arg[i]);
if ((obj) && (obj.value=='')) obj. value=commData[i];
}
}
}
// инициализация обязательно вставить после вывода инпутов.
getToInput ('author','email','url');
Как удалить из кеша страницу с комментарием? И что такое «лайф версия»?
Для этого в файле wp-comments-post.php (в корне сайта) добавить
перед wp_redirect ($location); ?> (строка находится в самом конце файла) setcookie ('comment','clearCache');
а в начале функции max_cashe () после
вставить:
Версия не из кеша.
Ой там не $my_cache_no = true;, а наверное $max_cache_no = true;
Не знаю точно, пока оригинального кода Max’a не видел. Но идея я думаю понятна?
Тут вот в чем дело. В платной версии это уже все работает автоматом. Поэтому ничего менять и доделывать не нужно. :)
А вот что касается использования родных куков вместо своих — нужно думать. То что не нужно менять шаблон заманчиво, но отлавливать и устанавливать куку нужно до отработки WordPress и тут может быть сложность: в WordPress редиректы при комментировании. Кроме этого кука сама по себе отлавливается WordPress’ом в своих недрах и явно подставляется в инпуты в value. То есть на уровне html-кода. Так что вариант Димы более надежен.
Мы сейчас говорим, не о подстановке куков в вордпресовскую версию, а о подстановке куков в кешированную версию, где поля (по идее) всегда должны быть чистыми.
Кроме того, джаваскриптовые функции можно внедрять в момент кеширования только в кешированные версии. В таком случае даже рекомендаций по изменению шаблона не нужно будет делать.
Кешированная страница отдается как есть голой статикой. В ней если и использовать куки, то только на уровне js. Но внедрять js в кэшированную версию не есть хорошо. Код должен оставаться чистым, так как его отдает WordPress.
Мм, мучился мучился. Вроде все условия выполнены, но во-первых, так и не заработало, а во-вторых, «редактор» вместо простановки тегов лепит мне.
Скрин вот
Не знаю, чем тебе помочь.
Прочитай про обновление плагина.
Вот, редактор ожил, спасибо.
Эх, че ж делать то с куками.
Dimox, так и не понял как подключить скрипт (весь блог прошерстил), если мне нужна только вторая его часть.
Просто добавляю код скрипта в какой-то JS-файл на сайте и подлючаю его?
очень нужно
Вторая часть без первой работать не будет,т. е. нужно использовать весь скрипт.
Да, если все условия, на которые я обратил внимание в статье, выполнены.
Мда, не знал, что jquery можно использовать и для таких вещей.
А можно ли узнать по-подробнее насчёт эффективности maxcache? Просто не нашёл на этом блоге. Может, плохо искал? :)
На странице скрипта вы найдете подробную информацию об этом. Я же лишь скажу, что разница с вариантом, когда этот скрипт не используется, огромна.
в шаблоне с темой, в файле (header.php) прописать строчку
Затем сохранить Конечный код jQuery-скрипта с любым названием, с расширением js,т. е. допустим файл будет иметь название — comments. js Загружаем его в любую директорию на сайт, и аналогично подключаем его в header. php
И все? Верно?
Пример кода вы неправильно вставили в комментарий, поэтому не знаю.
Да, действительно.
Т. е. в header. php достаточно прописать две строчки?
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="https://сайт/comment.js"></script>
Да, все верно.
Доброго дня.
А подключить можно, прописав две строчки?
Я правильно понял? Спасибо. А то я не знаю, как подключить квери…
Dimox,
хм. в начале плагин Antispam Bee блокировал добавление комментариев. Отключила. Теперь добавление комментария проходит, но я не вижу ничего похоже на надпись:
«Спасибо, за Ваш комментарий! Он будет опубликован, как только его проверит администратор сайта.»
Более того, при работающем скрипте Максима, комментарий к посту не добавляется. Видимо беруться старые данные из кэша
Буду признательна, если подскажите, в чем может крыться проблема.
Я не знаю, в чем дело.
Спасибо. Мне первая часть скрипта помогла.
Не подскажете, вот этот код:
if (/opera/.test (userAgent)) { var top = 'html'; } else { var top = 'html, body'; }
, что там Опера не так обрабатывает? Просто не припоминаю, чтоб у меня с ней проблемы были. Мне для общего развития. ;)
И еще вопрос. Хочу сделать так, чтоб в случае если в браузере куки от меня отсутствуют, в поля вводилась пару слов, типа «здесь имя», а «здесь почта». Я так понимаю — к строчке ниже надо прикрутить конструкцию else?
if (author) $j ('input[name="author"]').val (author);
if (author) $j ('input[name="author"]').val (author) else $j ('input[name="author"]').val ('Ку-ку');
— что-то типа этого?
Я еще, почитаю, ваш блог. В любом случае, надо с jQuery потихоньку разбираться.
Может в литературу, на ваш взгляд хорошую, ткнете? О программировании понятие имею, c jQuery сегодня вот, столкнулся.
Мне сложно объяснить.
Да, правильно.
Скрипт помогает не только при использовании кеширующего скрипта Максима. Есть шаблоны, в которых и без него эта проблема существует. То, что комментарий ушел на модерацию видно, а вот данные свои приходится вводить в поля по новой каждый раз. Вчера выяснилось, что этим грешат шаблоны от yootheme.com. Лень было разбираться, впихнули этот скрипт, и все заработало как нужно. Так что спасибо за скрипт.
Здравствуйте.
Вижу. что вы неплохо разобрались с плагином MaxCache. Может дадите несколько советов по работе с ним.
Меня интересует, как можно реализовать одновременную работу ЧПУ и MaxCache.
С пустым. htaccess скрипт отлично работает, но, когда включаю mod_rewrite, возвращаются тормоза.
Спасибо!
Про это надо автора скрипта спрашивать, а не меня.
С русскими никами проблему никак не решили? (в chrome работает корректно, а firefox заменяются на разные символы типа: @0>@?2)
Нет, так и не смог.
Отлично! Только вчера начал использовать MaxCache и сразу решил устранить некоторые баги. С Вашим скриптом всё получилось с первого раза! Сам попробовал оставить комментарий — вроде бы все сохранилось… Спасибо большое)))
Расскажите подробнее. Я установил скрипт Максима. Теперь хочу по Вашей статье установить эти скрипты. Но не знаю, как подключить их к сайту. Информации более нигде не нашел. Спасибо.