Main > CMS | Sape | Wordpress | Монетизация > WP Super Cache и Sape. Отключение кеширования.

WP Super Cache и Sape. Отключение кеширования.

27.02.2014 17 comments » Views: 8,712

Отключение кеширования в WP Super Cache

В очередной раз столкнулся с необходимостью поставить код Sape на сайт где был включен плагин WordPress-а: WP Super Cache. К сожалению, старый способ описанный в статье: WordPress, WP Super Cache и Sape  более не работает, поэтому пришлось разобраться с новым способом интеграции куска кода, который не будет кешироваться.

Сперва расскажу про то, где найти информацию, от которой я буду отталкиваться в статье:

  • FAQ, тут написано, что пример отключения кеширования можно посмотреть в файле:
    www/wp-content/plugins/wp-super-cache/plugins/dynamic-cache-test.php
  • WP Super Cache for Developers, тут написано, что при обновлении плагина из админки, директория
    www/wp-content/plugins/wp-super-cache/plugins/*
    будет очищена

Теперь, когда вы знаете где можно изучить матчасть, начнем писать плагин.

Прежде всего, нам надо перенести директорию wp-super-cache/plugins/* в другое место, чтобы при обновлении плагина, наши доработки не исчезали. Для этого делаем так:

  • Создаем директорию /www/wp-content/wp-super-cache-plugins/
  • Копируем в созданную директорию, все файлы из директории
    /www/wp-content/plugins/wp-super-cache/plugins/
  • Редактируем файл /www/wp-content/wp-cache-config.php
    ищем в нем

    и меняем на нашу папку

Теперь WP-Super-Cache будет искать свои дополнительные плагины в директории
www/wp-content/wp-super-cache-plugins/
вместо
www/wp-content/plugins/wp-super-cache/plugins/

 

Займемся созданием плагина.

Создаем файл:
www/wp-content/wp-super-cache-plugins/dynamic-widget-block.php

Опираясь на файл примера www/wp-content/plugins/wp-super-cache/plugins/dynamic-cache-test.php, добавляем в него такое содержимое:

Теперь создаем файл:
www/dwb-adapter.php

Добавляем в него такое содержимое:

Теперь нужно провести дополнительную настройку плагина, для этого заходим в админку на страницу конфигурации плагина и на вкладке Advanced, включаем опцию Enable dynamic caching.

Включение использования динамического кеширования WP Super Cache

Включение использования динамического кеширования WP Super Cache

Далее можно добавить следующий код прямо в файлы темы (например sidebar.php), но я предпочитаю использовать виджеты. Поэтому устанавливаем, если еще не установлен, виджет для вывода PHP кода: PHP Code Widget, помещаем его в нужный сайдбар и добавляем такой код:

Выглядит это так:

Добавляение кода в виджет PHP Code Widget

Добавляение кода в виджет PHP Code Widget

Теперь надо включить кеширование (если еще не включено) и очистить кеш WP-Super-Cache, для этого переходим к его конфигурации устанавливаем радио кнопку в положение Caching On и нажимаем кнопку Delete Cache:

Включение кеширования и удаление кеша WP Super Cache

Включение кеширования и удаление кеша WP Super Cache

Собственно теперь можно проверять работает ли кеширование для нашего файла, переходим на страницу сайта где отображается сайдбар в который вы добавили виджет, и смотрите выводится ли метка-времени (что-то типа 1393504359), эта метка времени должна увеличиваться при обновлении страницы:

Метка времени

Метка времени

Если метка времени обновляется и кеширование включено, значит все ок, наш файл НЕ кешируется..

Теперь остается в файле www/dwb-adapter.php убрать код вывода метки

и добавить наш контент который не должен кешироваться, например код подключения сапы:

на этом всё 🙂

 

Author: | Rating: 4/5 | Tags: , , ,

17 comments.

Write a comment
  1. Vitaliy Orlov Reply
    20.05.2018 в 12:37 pm
    Немного обновил статью. Описанное тут решение, на 20 мая 2018, все еще актуальное и работает.
  2. Виктор Reply
    07.11.2017 в 6:32 pm
    Всем привет. Можно ли отключить кеширование Супер Кешем для виджета woocommerce recently viewed products?
    Если да, то поделитесь кодом, пожалуйста. Сам не доганяю.
    • Vitaliy Orlov Reply
      07.11.2017 в 10:57 pm
      Привет, лично я не знаю как это сделать. Возможно, кто-то другой ответит.
  3. sasa Reply
    12.07.2016 в 11:16 am
    в файл dwb-adapter.php
    вставил вывод тэгов
    wp_tag_cloud('');
  4. sasa Reply
    12.07.2016 в 11:00 am
    у меня этот плагин не работает

    Страница eeeeee.com не работает

    Сайт eeeeee.com пока не может обработать этот запрос.
    HTTP ERROR 500


    удаляю кэш, страница загружается нормально
    загружаю ту же страницу еще раз, вылазит такая ошибка
  5. Денис Reply
    15.03.2016 в 12:41 am
    У меня в меню выводится корзина с данными из WC()->cart->cart_contents - как для блока с foreach отключить кеширование?
    • Vitaliy Orlov Reply
      15.03.2016 в 7:52 am
      В FAQ все расписано, в разделе "How do I make certain parts of the page stay dynamic?"
  6. Радим Reply
    06.02.2016 в 4:12 pm
    Добрый день!
    Подскажите, а если у меня в виджетах отображаются цитаты. И я бы хотел, что бы виджет с цитатами был динамичным (при обновлении цитата менялась). Как решить такую задачу?
    https://wordpress.org/plugins/quote-master/ - плагин для цитат
    • Vitaliy Orlov Reply
      07.02.2016 в 12:32 pm
      Я не работал с данным виджетом, поэтому не знаю что там к чему. Но, самое простое решение, либо активировать ajax загрузку (если у виджета есть такие настройки), либо поискать виджет который умеет работать через ajax. Т.е. смысл в том, чтобы загрузка цитаты происходила отдельно от загрузки страницы.
  7. Андрей Reply
    13.01.2016 в 4:41 am
    Столкнулся с проблемой: WP Super cache кэширует страницы магазины из-за этого в магазине глюки: корзина не обновляется ,а вместе с ней глючит доставка . Отключение в настройках Wp Super Cache страниц магазина не работает. Возможно, кто нибудь сталкивался с похожей проблемой?
    • Vitaliy Orlov Reply
      13.01.2016 в 7:19 pm
      Привет, попробуй добавить фрагменты страниц на вкладке "Настройки" плагина, там перед формой такой текст "Поле ниже Вы также можете заполнить фрагментами адресов страниц...". Только обрати внимание, что там два поля, одно НЕ кешировать, другое наоборот - кешировать. Под фрагментами, понимается часть url, например для site.com/checkout/step1 это может быть /checkout/. Если все равно не заработает, тогда советую смотреть в код wp super cache, в то место, где обрабатываются правила из этой формы и разбираться с конкретным случаем. В моем случае с wp polls, помогли фрагменты, так что мне не пришлось лезть в код.
  8. Dmity Reply
    22.01.2015 в 5:58 pm
    Сейчас понадобилось убрать один виджет из кеша, просто он выводит у меня динамическую информацию, которая меняется каждую минуту/секунду, и не могу разобраться, видимо опять там всё поменялось, ваш вариант не работает.
    Подскажите, как сейчас реализовать отказ от кеширования отдельного виджета?
    • Vitaliy Orlov Reply
      23.01.2015 в 8:45 am
      Протестить сейчас не могу, но вроде как в официальном faq написано что по прежнему используют wpsc_cachedata. Там есть ряд требований, чтоб оно все работало, их можешь почитать в разделе "How do I make certain parts of the page stay dynamic".
      Еще подумай, если этот виджет должен так часто обновляться, мб есть смысл выводить и обновлять его ajax-ом. В FAQ пишут, что это рекомендованный способ для динамического контента.
      • Dmity Reply
        23.01.2015 в 10:20 pm
        Да, спасибо, сделал через ajax.
  9. Артем Reply
    18.04.2014 в 10:51 am
    Скажите пожалуйста как отключить кеширование для хидера , сайдбара и футера
    • Vitaliy Orlov Reply
      27.04.2014 в 8:50 am
      Артем, могу ошибаться, но с помощью этого плагина такого сделать нельзя. Попробуй пойти от обратного и поискать плагин, который будет кешировать только нужные тебе блоки. Если есть опыт программирования, посмотри в сторону функций семейства ob_* с их помощью ты может получить вывод нужного куска функционала, сохранить его в кеш-файл, и потом проверив разницу между временем обновления файла и текущим временем (time-filemtime) можешь либо выводить данные из кеш-файла, либо пересоздавать его.

Leave a Reply

Your email address will not be published. Required fields are marked *

Allowed HTML-tags: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>


Links to this post:
  1. Pingback from Wordpress, WP Super Cache и Sape 27.02.2014