~ / blog / series / wordpress-na-keshiruemom-sayte

WordPress на кэшируемом сайте

Цикл о том, как делать комментарии, формы, подписку, счётчики и рекламу на WordPress, чтобы они не ломали кэш страниц, а кэш не ломал их. Всё — на нашем сайте и рабочих проектах, с замерами.

#WordPress 3 мин

Один HTML на всех: что можно печатать в кэшируемую страницу WordPress

Страница в кэше живёт неделю и уходит всем одинаковой. Таблица «можно и нельзя в разметку», три пути для меняющегося — в ключ, в обход, на клиент, — и короткий список того, что у нас идёт мимо кэша.

· · ·
#WordPress 3 мин

wp-cron на сайте с кэшем страниц: почему задачи не запускаются и как правильно

Страница из кэша не доходит до PHP, и встроенный крон WordPress почти перестаёт работать. Системный крон раз в минуту, и две грабли: задание от root (140 523 чужих файла кэша) и зонды, которые сами запускают очередь.

· · ·
#WordPress 3 мин

Правки мимо save_post: где WordPress меняет страницу, не сбрасывая кэш

Новая статья видна не только по своему адресу, мета и опции меняются без сохранения записи, прямой UPDATE не вызывает хуков. Пять путей изменения, которые пропускает сброс на save_post, и как найти свои дыры за полчаса.

· · ·
#WordPress 3 мин

Вошедшие пользователи, пароль и предпросмотр на кэшируемом сайте

Три служебные куки в обходе кэша, обход и запрет записи — разные настройки, «у меня обновилось, а у посетителей нет» и интерфейс только для редактора: класс на body, данные в data-*, код динамическим импортом.

· · ·
#WordPress 3 мин

Просмотры и лайки, когда страница отдаётся из кэша

Цифр нет в HTML: один запрос после загрузки засчитывает просмотр и приносит счётчики. Просмотр раз в 12 часов с адреса, без ботов и редакторов, атомарный UPDATE вместо «прочитать и записать», голос на сервере без куки.

· · ·
#WordPress 3 мин

Комментарии в WordPress без дыр: что опасно в штатном варианте

Штатный адрес приёма, почта комментатора, Gravatar, ссылки, публикация без проверки. Как сделано здесь: имя и текст, всё на модерацию, ссылки отклоняются сразу, свой приём через ajax, ловушка, время и 3 комментария за 10 минут.

· · ·
#WordPress 2 мин

Кука комментатора выключает кэш почти на год

WordPress сохраняет имя автора комментария в куке на 347 дней, а кука comment_author_ во всех типовых конфигурациях ведёт мимо кэша. Самые вовлечённые читатели получают самый медленный сайт. Решение — одна строка.

· · ·
#WordPress 3 мин

Комментарии отдельным запросом: кэш больше не сбрасывается вовсе

Список комментариев в HTML статьи заставлял сбрасывать кэш всего сайта на каждый комментарий, даже неодобренный, и обходить 138 адресов заново. Теперь список приходит запросом после загрузки, хуки сброса удалены, одобрение видно сразу.

· · ·
#WordPress 3 мин

Форма без nonce на кэшируемом сайте: почему так надёжнее

Токен WordPress живёт сутки, страница в кэше — неделю. А анонимный nonce одинаков для всех и от спама не защищает. Вместо него ловушка, время заполнения от 3 секунд и 5 заявок в час с адреса. Плюс: заявка не должна сбрасывать кэш.

· · ·
#WordPress 3 мин

Заявка пишется в базу до отправки: почта и Telegram падают

Почта и Telegram отказывают независимо — в нашем журнале есть таймауты Telegram. Поэтому порядок: проверка, запись заявки в базу, потом каналы, итог доставки — колонкой в админке. Как достать текст ошибки wp_mail и закрыть тип записи заявок.

· · ·
#WordPress 2 мин

Залипшая ошибка поля глушит форму навсегда

Сервер поругался на одно поле, посетитель исправил другое — и запрос больше не уходит: флаг ошибки снимается только вводом в то же поле. Почему ошибку долго не видели, сценарий, который её воспроизводит, и исправление в одну строку.

· · ·
#WordPress 2 мин

Маска телефона по разметке, проверка по куке: верный номер отвергнут

Флаг и маску рисует разметка из кэша, а сервер проверяет номер по куке страны. Они расходятся — и правильный +7 под флагом «Россия» отвергается. Решение без синхронизации: принимать номер, подходящий под шаблон любой известной страны.

· · ·
#WordPress 2 мин

Согласие на обработку данных в форме: галочка, сервер и редакция текста

Галочку, которую проверяет только браузер, обходят одним запросом. Сервер проверяет согласие сам, а вместе с заявкой хранит время и редакцию текста. Почему это не мешает кэшу и что с плашкой про cookie.

· · ·
#WordPress 3 мин

Подписка с подтверждением на кэшируемом сайте

Двойное подтверждение, чтобы не подписали чужой адрес; ссылки из письма мимо кэша через X-Accel-Expires, потому что nginx игнорирует Cache-Control; рассылка только при первой публикации, пачками по 40; отписка и честный список того, что ещё не сделано.

· · ·
#WordPress 3 мин

Подписка через Telegram-бота: ссылка вместо формы

Кнопка — ссылка t.me с параметром start, одинаковая для всех и идеальная для кэша. Подтверждение не нужно, бот забирает сообщения сам раз в минуту кроном, с замком на 50 секунд и смещением до обработки. Рассылка — общая с почтой.

· · ·
#WordPress 3 мин

Каждый ajax и REST-адрес — новая дверь: плагин отдавал заявки без входа

Внутренний плагин статистики отдавал анониму заявки с телефонами за любой период: на шести сайтах от 4 до 181 заявки за пять недель. Защита сравнивала 6 символов с 11. Как правильно — permission_callback, грабля с X-WP-Nonce и проверка своих адресов за 10 минут.

· · ·
#WordPress 2 мин

Реклама в кэшируемой странице: места, сброс при смене кода и маркировка

Код места одинаков для всех и кэшу не мешает — мешает смена кода в админке: старая кампания живёт в кэше неделю. Четыре места, пустое не выводится, сохранение — полный сброс, ads.txt и подпись «Реклама».

· · ·
#WordPress 3 мин

Чек-лист: новая функция WordPress на кэшируемом сайте

Вопросы, которые стоит задать до того, как добавлять форму, счётчик или интеграцию: что попадает в HTML, что сбрасывает кэш, куки и заголовки, отдельные запросы и их адреса, крон, формы и проверка глазами анонима.

· · ·

$ tail -f /blog

Не пропустите новые статьи

Пишу разборы по скорости сайтов, кэшу и разработке — на живых проектах и с цифрами. Подпишитесь, и ссылка на новую статью придёт сразу после выхода. Без рекламы и спама, отписаться — в один клик.

В Telegramодна кнопка «Старт» в боте

или на почту

связаться

Расскажите о задаче