WP-rocket — один из самый популярных плагинов кэширования для WordPress, имеющий богатый функционал и возможности.
ВП-Рокет имеет возможность объединять и сжимать JavaScript и css формируя для каждого из них свой файл. При этом, рокет «собирает» весь inline js/css с html кода сайта, и так же добавляет его в общие кэшируемые файлы. Это конечно удобно, но в некоторых случаях, а особенно при его совместной работе с другими плагинами, могут возникать ошибки или не корректная работа.
Сама задача, указанная в заголовке данной статьи может показаться довольно странной. Зачем нужно кэшировать объявления, почему их нельзя оставить так как есть и просто выводить в нужных блоках? Так то оно так, и все верно! Но что, если вы решите использовать кэширование совместно с плагином Flat PM?
Flat PM — плагин для рекламы. Менеджер рекламы, позволяющий удобным способом управлять всей рекламой на вашем сайте используя различные условия для ее показа.
Как раз вот рокет с флетом дружить и не хочет. Догадываюсь, что до некоторых пор все работало нормально, пока разработчики ФлетПМ, не решили перенести формирования логики вставки рекламных объявлений с регулярных выражений в HTML (точно не знаю, не проверял) на JS и DOM. Что повлекло за собой проблемы с кэшированием гугл объявлений. И как следствие, объявлений не отображались на сайте.
К счастью, все решается достаточно просто, для этого нужно или изучить код плагина wp-rocket, или написать в техподдержку. Второе куда проще, т. к. файлов в рокете не мало, а разработчики отзывчивые и всегда приходят на помощь).
Плагин рокета расширяет свой функционал набором фильтров и хуков, позволяющий изменить логику формирования кэша. В нашем случае, мы будем использовать фильтр «rocket_excluded_inline_js_content», на входе он принимает массив ключей, данные которых не будут попадать в общий кэшированный js файл.
add_filter('rocket_excluded_inline_js_content', function($excluded_inline) { if(($delete_key = array_search('adsbygoogle', $excluded_inline)) !== false) { unset($excluded_inline[$delete_key]); } return $excluded_inline; }, 10, 1);
В коде выше, среди множества значений массива, мы ищем «adsbygoogle». Этот «ключ» отвечает за игнорирование в html, inline-js кода AdSense объявлений. Найдя ключ такого значения в массиве «$excluded_inline», мы удаляем его. И возвращаем массив «$excluded_inline» из фильтра. Теперь, вп-рокет не будет игнорировать такие объявления, а будет их кэшировать как и обычный JS код.
Теперь, Флат ПМ будет корректно отображать гугл объявления.