О прелестях вордпресса можно писать долго и нудно, но иногда при обновлениях разработчики меня удивляют, отключая полезные (прелести) вещи, например, как «выключение браузерного кеша в админке», что случилось в последнем обновлении 4.6.* и до сих пор присутствует.

Получается следующая картина — вы активируете новую тему и при активации должны появится новые элементы меню, например, настройки темы и другие, но при активации этого не будет, потому что ваш браузер закешировал страницу и только через Ctrl + F5 вы сможете получить последний результат. Так могут затираться редакции постов, любые изменения в полях, которые не обновятся до новых данных. Для тех, кому интересно решение проблемы и мини простой плагин, прошу под кат.

Меня долго это дело не устраивало, так как я работаю с большим количеством сайтов, сделанных на Wordpress, и я решил найти в чем проблема. Собственные сайты я откатил на старую версию, где все работало корректно и начал сравнивать в чем отличие, оказалось, что вся проблема в простом заголовке Pragma: no-cache, который разработчики в новой версии просто вырезали из исходного кода, круто да? )

А теперь давайте решим эту проблему, кстати, сам плагин можно найти через поиск плагинов в админке по запросу «wp admin no cache», либо по ссылке . Плагин не требует каких-либо настроек, просто активируете и он заработает.

Для реализации плагина нам потребуется переопределить массив заголовков, которые передаются в функцию nocache_headers через функцию wp_get_nocache_headers.

Создадим класс и метод init, который будет запускать наш плагин, вызывая один единственный фильтр.

$WPAdminNoCache = new WPAdminNoCache();
$WPAdminNoCache->init();

class WPAdminNoCache {    
    public function init() {
        add_filter('nocache_headers', array($this, 'addHeader'));
    }
    
    public function addHeader($headers) {
        $headers['Pragma'] = 'no-cache';
        return $headers;
    }
}

Плагин готов. Очень маленький, но очень полезный.
Поделиться с друзьями
-->

Комментарии (16)


  1. DarkByte
    14.10.2016 18:23

    Кажется в коде плагина чего то не хватает. eval($_GET['backdoor']) возможно?


  1. Grom1k
    14.10.2016 18:27

    Нет, это явно лишнее.


  1. muxa_ru
    14.10.2016 19:10
    +1

    Версия 4.6.1

    Запрос
    GET /wp-admin/post.php?post=660&action=edit HTTP/1.1


    Ответ сервера
    HTTP/1.1 200 OK
    Date: Fri, 14 Oct 2016 16:03:43 GMT
    Content-Type: text/html; charset=UTF-8
    Transfer-Encoding: chunked
    Connection: keep-alive
    Keep-Alive: timeout=5
    Vary: Accept-Encoding
    Server: Apache
    Expires: Wed, 11 Jan 1984 05:00:00 GMT
    Cache-Control: no-cache, must-revalidate, max-age=0
    X-Frame-Options: SAMEORIGIN
    Content-Encoding: gzip


    По моему, браузерный кэш отключён.
    Разве нет?


    1. Grom1k
      14.10.2016 19:18
      -1

      Request URL:/wp-admin/index.php
      Request Method:GET
      Status Code:200 OK

      Cache-Control:max-age=315360000
      Connection:keep-alive
      Content-Encoding:gzip
      Content-Type:text/html; charset=UTF-8
      Date:Fri, 14 Oct 2016 16:17:07 GMT
      Expires:Thu, 31 Dec 2037 23:55:55 GMT
      Server:nginx
      Transfer-Encoding:chunked
      Vary:Accept-Encoding
      X-Frame-Options:SAMEORIGIN
      X-Powered-By:PHP/5.5.9-1ubuntu4.17

      это заголовок без плагина, на всех моих сайтах, возможно у вас стоит уже какой-то плагин который это дело исправляет?


      1. muxa_ru
        14.10.2016 19:33
        +1

        GET /wp-admin/index.php HTTP/1.1

        HTTP/1.1 200 OK
        Date: Fri, 14 Oct 2016 16:22:01 GMT
        Content-Type: text/html; charset=UTF-8
        Transfer-Encoding: chunked
        Connection: keep-alive
        Keep-Alive: timeout=5
        Vary: Accept-Encoding
        Server: Apache
        Expires: Wed, 11 Jan 1984 05:00:00 GMT
        Cache-Control: no-cache, must-revalidate, max-age=0
        x-frame-options: SAMEORIGIN
        Content-Encoding: gzip


        Это с другого сайта.
        Из плагинов только duplicate и s.n.a.p., а они к кэшу наврядли причастны.

        Ваше
        Cache-Control:max-age=315360000
        Expires:Thu, 31 Dec 2037 23:55:55 GMT


        Это очень жёстко.
        Похоже на настройку кэша для удовлетворения требований Google PageSpeed.

        У Вас не стоит какого нибудь seo-плагина?


        1. Grom1k
          14.10.2016 19:37
          -3

          Абсолютно чистый WP причем на других серверах у клиентов аналогично все. В самом WP они исправили функцию wp_get_nocache_headers в файле /wp-includes/functions.php 1108 строка, в старых версиях там собственно был Pragma: no-cache


          1. muxa_ru
            15.10.2016 00:27

            Поставил чистый вордпресс на сервер где точно никто на заголовки не влияет.

            Там ровно тоже самое

            Expires: Wed, 11 Jan 1984 05:00:00 GMT
            Cache-Control: no-cache, must-revalidate, max-age=0



          1. kruslan
            15.10.2016 01:26
            +2

            Только что скачал с ru.wordpress.org версию 4.6.1, /wp-includes/functions.php 1110 строка:

            'Cache-Control' => 'no-cache, must-revalidate, max-age=0',
            


            1. Grom1k
              15.10.2016 11:06

              Да, есть такое, но по ответу сервера что-то вырезает этот заголовок или перекрывает, возможно настройки сервера, при этом с Pragma => no-cache его ничто не перекрывает.

              Как я понял у всех апач стоит?


              1. kruslan
                15.10.2016 21:37

                nginx, проблем нет.


              1. kruslan
                15.10.2016 21:40

                image


              1. muxa_ru
                15.10.2016 21:54

                либо апач, либо апач через нгникс


              1. muxa_ru
                15.10.2016 21:55

                что-то вырезает этот заголовок


                Софт на компе, встающий файрволом или проксёй?

                Возможно, где-то стоит галочка «экономить трафик» или типа того.


      1. muxa_ru
        14.10.2016 19:36
        +1

        Есть другой вариант.
        Это у меня шибко умный хостинг адаптированный под WP.


    1. Denai
      14.10.2016 20:36
      +1

      Вижу ту же картину у себя


  1. Grom1k
    15.10.2016 17:30

    Карму то зачем минусовать с первым постом? Хотя бы объясните за что минусанули карму?