Кеширование без плагинов в 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, который находится в корне вашего сайта.

1 Комментарий

  1. Немного обновил код. Наткнулся на плагин rainbow-cache для WordPress в котором учитывается отправка post-запросов. Может кто-то пользовался данным плагином?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *