Получается следующая картина — вы активируете новую тему и при активации должны появится новые элементы меню, например, настройки темы и другие, но при активации этого не будет, потому что ваш браузер закешировал страницу и только через 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)
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
По моему, браузерный кэш отключён.
Разве нет?Grom1k
14.10.2016 19:18-1Request 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
это заголовок без плагина, на всех моих сайтах, возможно у вас стоит уже какой-то плагин который это дело исправляет?muxa_ru
14.10.2016 19:33+1GET /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-плагина?Grom1k
14.10.2016 19:37-3Абсолютно чистый WP причем на других серверах у клиентов аналогично все. В самом WP они исправили функцию wp_get_nocache_headers в файле /wp-includes/functions.php 1108 строка, в старых версиях там собственно был Pragma: no-cache
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
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',
Grom1k
15.10.2016 11:06Да, есть такое, но по ответу сервера что-то вырезает этот заголовок или перекрывает, возможно настройки сервера, при этом с Pragma => no-cache его ничто не перекрывает.
Как я понял у всех апач стоит?muxa_ru
15.10.2016 21:55что-то вырезает этот заголовок
Софт на компе, встающий файрволом или проксёй?
Возможно, где-то стоит галочка «экономить трафик» или типа того.
Grom1k
15.10.2016 17:30Карму то зачем минусовать с первым постом? Хотя бы объясните за что минусанули карму?
DarkByte
Кажется в коде плагина чего то не хватает. eval($_GET['backdoor']) возможно?