Una serie de problemas con los plugins de cache de Wordpress me llevaron a buscar una alternativa. Y encontré una bastante simple.
Dos archivos php extra dentro del theme. Una carpeta para guardar las páginas cacheadas. Y una edición al archivo single.php
Primero, dos archivos nuevos:
top-cache.php
<?php$url = $_SERVER["SERVER_NAME"].str_replace("/", "-", strtok($_SERVER["REQUEST_URI"], '?'));
$cachefile = './wp-content/cache/cached-'.$url.'.html';
// lee del cache si el archivo es posterior a la última modificación del post
if (file_exists($cachefile) && get_post_modified_time( 'U', false, $post->ID, true ) < strtotime('-4 hours', filemtime($cachefile))) {
readfile($cachefile);
exit;
}
ob_start();
La variable $cachefile define la ruta de la carpeta donde se guardan las páginas cacheadas.
La variable $url construye el nombre del archivo que se guardará en el cache. Incluye el hostname y la ruta de la página sin las query (para prevenir que se guarden en cache páginas con variables UTM u otras).
La ruta para guardar los archivos del cache en este caso es /wp-content/cache/ . Si la carpeta /cache/ no está creada, tienes que crearla con el FTP. Con permisos chmod 0775.
Si la fecha de modificación del post es anterior a la fecha de creación del archivo en cache, lee el cache. En caso contrario, ejecuta el resto del código (el de la página single.php), incluido el segundo archivo nuevo:
bottom-cache.php
<?php$url = $_SERVER["SERVER_NAME"].str_replace("/", "-", strtok($_SERVER["REQUEST_URI"], '?'));
$cachefile = './wp-content/cache/cached-'.$url.'.html';
$cached = fopen($cachefile, 'w');
fwrite($cached, ob_get_contents());
fclose($cached);
ob_end_flush(); // Send the output to the browser
Este documento repite las variables $url y $cachefile. Y crea el archivo dentro de la carpeta cache.
Cuando la página está en cache, este archivo no se ejecuta.
single.php
En la página single.php hay que hacer dos pequeñas modificaciones.
Al comienzo del archivo:
<?phpif (!is_user_logged_in()) {
include('top-cache.php');
}
get_header(); ?>
Y al final del archivo:
<?phpget_footer();
if (!is_user_logged_in()) {
include('bottom-cache.php');
}
Si el visitante NO está logueado, entonces carga top-cache.php y bottom-cache.php. Esto previene que los editores y administradores de Wordpress vean páginas cacheadas.
Espero que les sirva.
No hay comentarios:
Publicar un comentario