SDWSKi.COM
SDWSKi Cache. Плагін кешування для WordPress

SDWSKi Cache. Плагін кешування для WordPress

Термін 5 тижнів
Мова Українська, English
Рік 2026
Бюджет до 5 000 €
Про
проєкт
плагіни wordpress
Бюджет
Флагман
до 5 000 €
Індивідуальна розробка преміумкласу під ключ

Плагін сторінкового кешу для WordPress із режимом інтернет-магазину. SDWSKi Cache віддає готові HTML-сторінки ще до завантаження WordPress, одразу зберігає їх у стисненому вигляді й коректно оминає кеш там, де сторінка залежить від конкретного відвідувача: кошик, особистий кабінет, коментарі, закриті записи.

Цей проєкт — це GPL-плагін сторінкового кешу, написаний на основі стандартних правил кешування в системі WordPress: основу принципів кешування збережено, а ядро віддачі, режим WooCommerce, інтерфейс і захист від конфліктів написано повністю з нуля.

Завдання

Стандартні кеш-плагіни добре працюють на блогах і погано — у магазинах. Типові проблеми, які я хотів розв’язати:

  • до кешу потрапляє сторінка з чужим лічильником кошика;
  • у картці товару залишається старий залишок;
  • багатомовний сайт віддає відвідувачу сторінку не його мовою;
  • у разі збою оптимізації (мініфікація, об’єднання файлів) користувач бачить порожній екран;
  • в адмінці повно реклами та посилань на сторонній сайт.

Архітектура

Плагін складається з трьох рівнів, кожен із яких виконує свою частину завдання.

1. Завантажувач (sdwski-cache.php). Вирішує лише одне: чи можна запускати рушій. Якщо на сайті вже активний оригінальний плагін або інша копія, завантажувач нічого не підключає, не реєструє хуки та показує сповіщення з кнопкою «Вимкнути й запустити». Усі класи, функції та константи рушія мають власні префікси, тому помилки на кшталт «Cannot redeclare» виключені, у якому б порядку WordPress не завантажив плагіни.

2. Рушій (sdwski-engine.php, inc/). Класичний рівень: генерування й очищення кешу, мініфікація та об’єднання CSS/JS, попереднє завантаження, правила виключень, CDN (зокрема Cloudflare), очищення Varnish, модуль безпеки, планувальник очищення, WP-CLI. Тут також перехоплюється виведення сторінки через буфер виведення.

3. Turbo-рівень (inc/turbo/). Мій основний внесок. Це drop-in advanced-cache.php, який WordPress підключає раніше за тему та плагіни, і ядро turbo-core.php, яке керує його налаштуваннями, станом і очищенням.

Як працює віддавання з drop-in

Порядок перевірок у advanced-cache.php побудовано так, щоб за будь-якого сумніву передати запит WordPress:

  1. Обробляються лише запити GET.
  2. Запити бота попереднього завантаження завжди спрямовуються до WordPress, щоб сторінку було створено або оновлено.
  3. Хост і схема (http/https) мають збігатися з адресою сайту, що охоплює варіанти з www і без нього.
  4. Якщо в cookie є ознаки авторизованого користувача, коментатора, захищеного паролем запису або сесії магазину, відвідувач отримує живу сторінку. Список можна розширити власними назвами cookie.
  5. Лише після цього виконується пошук готового файлу в кеші.

Якщо файл знайдено, відповідь формується без запуску WordPress. У заголовках передаються Vary: Accept-Encoding, ETag і X-ruzi-Turbo: HIT, який зручно перевіряти в браузері або через curl -I.

Попередньо стиснені копії та умовні запити

Стиснення виконується один раз під час створення сторінки, а не за кожного запиту. Поруч із index.html розташовані index.html.gz і, якщо на сервері є розширення brotli, index.html.br. Drop-in перевіряє заголовок Accept-Encoding і віддає відповідний варіант. На умовний запит зі збігом ETag відповідає 304 без читання файлу.

Під час очищення кешу видаляються всі варіанти сторінки: звичайний, gzip і brotli, а також посторінкова навігація та копії за мовами. Це захищає від «осиротілих» стиснених файлів, які інакше пережили б видалену сторінку.

Режим інтернет-магазину (WooCommerce)

Найбільш об’ємна частина роботи. Правила дублюються на трьох рівнях: у .htaccess, у drop-in і в рушії, тому захист не залежить від одного перемикача.

ЗавданняРішення
Чужий кошик у кешіВідвідувач із товарами в кошику або сесією магазину завжди отримує актуальну сторінку, його запит не створює спільний кеш
Кошик, оформлення замовлення, кабінетЦі сторінки взагалі не кешуються
Застарілі залишок і цінаЗміна товару, залишку, ціни, статусу або замовлення очищає кеш. Режим за замовчуванням: увесь кеш. Працюють хуки woocommerce_update_product, woocommerce_order_status_changed і transition_post_status
Імпорти в обхід WooCommerceМаксимальний вік кешу, за замовчуванням 3 години
Лічильник кошика в шапціУ кеші завжди нуль, фактичне число підставляється невеликим скриптом за заданим CSS-класом. На сервері скидання до нуля розпізнає також формати «(3)», «3 шт.»
Залишок у картціРядок залишку запитується заново під час кожного перегляду сторінки товару та каталогу
МінікошикБлок повністю оновлюється через фрагменти WooCommerce
Ціни, що залежать від валюти або групиНеобов’язковий режим «без кешу» для таких сторінок

Усі налаштування магазину винесено на окрему вкладку «WooCommerce». Класи елементів можна вводити без крапки, наприклад cart-count.

Многоязычность

Кеш ведеться окремо для кожної мови, тому відвідувач з англійською версією не отримає кеш російської, і навпаки. Плагін SDWSKi Cache сумісний із плагінами багатомовності. Насамперед 100% гарантована сумісність із плагіном ШІ-перекладу SDWSKi Перекласти.

Відмовостійкість

  • Відкат у разі збою оптимізації. Callback output buffer захищений: якщо мініфікація або об'єднання файлів завершилися помилкою, повертається початкова сторінка.
  • Drop-in можна видалити будь-коли. Тоді WordPress просто продовжує працювати як зазвичай, про це сказано в самому заголовку файлу.
  • Сторінка статусу Turbo показує за пунктами, чи все налаштовано: drop-in, права, .htaccess, доступність brotli.
  • Безпечне видалення. Плагін не видаляє спільні дані, доки на сайті залишається інша копія рушія.

Що ще є всередині

Попереднє завантаження кешу за розкладом через WP-Cron, мініфікація HTML/CSS/JS, об’єднання файлів, відкладене завантаження зображень, правила винятків, очищення кешу окремих сторінок, налаштування для Nginx і Varnish, інтеграції з CDN, кешування у браузері, вимкнення emoji, WP-CLI. Інтерфейс і докладну вкладку «Інструкція» перекладено російською.

Стек

PHP, WordPress Plugin API (хуки, WP-Cron, output buffering, drop-in advanced-cache.php), правила Apache .htaccess, JavaScript і CSS для адмінінтерфейсу та «живих» елементів магазину, gettext (.pot, .po, .mo) для локалізації.

Встановлення

  1. Скопіюйте папку sdwski-cache у /wp-content/plugins/ та активуйте плагін.
  2. У меню «SDWSKi Cache» увімкніть «Cache System» і збережіть.
  3. Відкрийте «Налаштування → SDWSKi Cache: Turbo» і переконайтеся, що всі пункти статусу зелені.
  4. Перевірте результат: відкрийте сторінку в приватному вікні та знайдіть заголовок X-ruzi-Turbo: HIT.

История версий

  • 1.5.3-turbo.10 — окрема вкладка WooCommerce, «живий» залишок, «живий» мінікошик.
  • 1.5.3-turbo.9 — захист кошика та залишків тепер завжди ввімкнено за активного WooCommerce, очищення кешу за будь-яких змін товару й замовлення, максимальний вік кешу — 3 години.
  • 1.5.3-turbo.8 — лічильник кошика підставляється скриптом, виправлено збереження налаштувань режиму магазину.
  • 1.5.3-turbo.2 — захист від конфлікту з оригінальним плагіном, власна папка, вкладка «Інструкція».
  • 1.5.3-turbo.1 — режим магазину, drop-in, попередньо стиснені сторінки, ETag і 304, новий інтерфейс, рекламу видалено.

Ліцензія та походження

Проєкт поширюється на умовах GPLv2 або новішої версії. Він заснований на відкритому GPL-плагіні кешування сторінок: вихідний код належить його авторам, а мої зміни й доповнення оформлені окремо та описані вище.