Кеширование без плагинов в WordPress
Пару лет назад я писал про кеширование на WordPress без плагинов, но оно не учитывало авторизирован ли пользователь или нет. А это важно, т.к. незалогинный пользователь может получит страницу с элементами, которые ему должны быть не доступны. И вот теперь настала пора исправить этот недостаток и написать новое кеширование без плагинов для WordPress.
За основу возьмем предыдущий код и добавим необходимый функционал. Проверять авторизацию будем по кукам. У авторизированного пользователя должны быть кука wordpress_logged_in_
Функция проверки существования куки
function checkCookie() {
foreach($_COOKIE as $k => $v)
if (strpos($k, 'wordpress_logged_in') === 0)
return true;
return false;
}
//если кука есть, то не кешируем
if(checkCookie() === true) {
$cached = false;
}
Теперь объединим код
<?php
$start = microtime();
$filename = 'cache/'.md5($_SERVER['REQUEST_URI']).'.html';
$cached = false;
$time = 4 * 60 * 60; // Время кеша в секундах (4*60*60 = 4 часа)
$stat = 0; // Установите 1 для вывода времени загрузки страницы (по умолчанию 0)
function checkCookie() {
foreach($_COOKIE as $k => $v)
if (strpos($k, 'wordpress_logged_in') === 0)
return true;
return false;
}
//если кука есть, то не кешируем
if(checkCookie() === true) {
$cached = false;
} else if (file_exists($filename)) {
if ((time()-filemtime($filename))<$time) {
$cached = true;
} else {
//удаляем файл
unlink($filename);
$cached = false;
}
if ($cached) {
readfile($filename);
} else {
ob_start();
// WP
define('WP_USE_THEMES', true);
require('./wp-blog-header.php');
//сохраняем и выводим сгенерированный контент
$text = ob_get_clean();
$fh = fopen($filename, 'w+');
fwrite($fh, $text);
fclose($fh);
echo $text;
}
} else {
//просто генерим страницу
define('WP_USE_THEMES', true);
require('./wp-blog-header.php');
}
$finish = microtime();
//при необходимости выводим затраченное время
if ($stat==1) echo $finish-$start;
?>
Как и в прошлый раз, создайте каталог cache в корне вашего сайта. Затем поставьте на нее права 777. Далее представленный выше код сохраняете в файл index.php, который находится в корне вашего сайта.
Немного обновил код. Наткнулся на плагин rainbow-cache для WordPress в котором учитывается отправка post-запросов. Может кто-то пользовался данным плагином?