Давайте напишем маленький, но очень полезный плагин для Wordpress 4.6.*?

О прелестях вордпресса можно писать долго и нудно, но иногда при обновлениях разработчики меня удивляют, отключая полезные (прелести) вещи, например, как «выключение браузерного кеша в админке», что случилось в последнем обновлении 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;
    }
}

Плагин готов. Очень маленький, но очень полезный.

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 18

    0
    Кажется в коде плагина чего то не хватает. eval($_GET['backdoor']) возможно?
      0
      Нет, это явно лишнее.
        +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
          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
            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-плагина?
              –3
              Абсолютно чистый WP причем на других серверах у клиентов аналогично все. В самом WP они исправили функцию wp_get_nocache_headers в файле /wp-includes/functions.php 1108 строка, в старых версиях там собственно был Pragma: no-cache
                0
                Поставил чистый вордпресс на сервер где точно никто на заголовки не влияет.

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

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


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

                  'Cache-Control' => 'no-cache, must-revalidate, max-age=0',
                  
                    0
                    Да, есть такое, но по ответу сервера что-то вырезает этот заголовок или перекрывает, возможно настройки сервера, при этом с Pragma => no-cache его ничто не перекрывает.

                    Как я понял у всех апач стоит?
                      0
                      nginx, проблем нет.
                        0
                        image
                          0
                          либо апач, либо апач через нгникс
                            0
                            что-то вырезает этот заголовок


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

                            Возможно, где-то стоит галочка «экономить трафик» или типа того.
                      +1
                      Есть другой вариант.
                      Это у меня шибко умный хостинг адаптированный под WP.
                      +1
                      Вижу ту же картину у себя
                      0
                      Карму то зачем минусовать с первым постом? Хотя бы объясните за что минусанули карму?
                        0

                        Я начал наблюдать аналогичную проблему сегодня и после часа убитого времени я таки нашёл expires max; опцию в одном из nginx конфигов (в глобальной области видимости), который отравлял жизнь приписывая Cache-Control: max-age=315360000.

                          0
                          Pragma — это клиентский заголовок, которого в ответе сервера по стандартам быть не должно. В ранних версиях WordPress он был добавлен для старых версий Internet Explorer, которые не понимали заголовок Cache-Control, а в WordPress 4.6 был убран за ненадобностью.

                          Проблемы наблюдаются, когда сервер принудительно кеширует страницы админки, игнорируя HTTP-заголовки WordPress и самостоятельно выставляя Cache-Control для всех страниц. Возврат Pragma в этом случае может помочь обойти проблему, однако для полноценного решения лучше не изобретать плагин, а правильно настроить сервер.

                          Only users with full accounts can post comments. Log in, please.