Invalidar el DONOTCACHEPAGE a través de un filtro

En este artículo

Introducción

La mayoría de plugins WordPress utilizan una constante estándar para excluir páginas de la caché: la  DONOTCACHEPAGE. Cuando esta constante está definida como true durante una petición, WP Rocket no copiará en caché la pagina interesada y permitirá una petición regular de base de datos a WordPress.

De todos modos, en algunos casos pocos frecuentes, este proceso tiene que ser invalidado y WP Rocket te permite hacerlo. Te explicamos cómo.

Cómo hace WP Rocket para copiar en caché una página

El objetivo final de cualquier plugin de caché es evitar de cargar WordPress y, cuando posible, servir cada página al navegador como una coleción de archivos estáticos.

La copia en caché de una página con WP Rocket se puede semplificar así:

1
Uno de los primeros archivos que WordPress carga después de la primera petición inicial a  index.php es wp-config.php. La primera cosa que WP Rocket hace es definir la constante  WP_CACHE como  true en la parte superior del archivo  wp-config.php: define( 'WP_CACHE', true);
2
Así WordPress sabe que es hora de cargar  wp-content/advanced-cache.php.
3
Dentro de  advanced-cache.php WP Rocket dice a WordPress de cargar  wp-rocket/inc/front/process.php.
4
Dentro de  process.php WP Rocket carga  wp-content/wp-rocket-config/{site-url.tld}.php que contiene los ajustes relevantes definidos a nivel usuario.
5
Siempre desde  process.php, y después haber procesado una serie de test de exclusión etc., WP Rocket copia en la caché los archivos para la página pedida.

Una vez que la página ha sido almacenada en caché, la petición de página se realizará directamente a través de la caché, sin alguna consulta a la base de datos.

Excluir una página de la caché a través deDONOTCACHEPAGE

Hay algunos tipos de páginas que nunca tienen que ser copiadas en caché. Piensa por ejemplo a un escenario de e-commerce: cuando un cliente entra en la página del pago, seguramente no le encantaría encontrarse con los datos del pago del cliente precedente...

Plugins elaborados como WooCommerce (y mucho más) usan la constante  DONOTCACHEPAGE para avisar los plugins de caché de las páginas que no deberían ser copiadas en caché.

Consecuentemente, todos los plugins de caché más populares, incluyendo WP Rocket, soportan la constante y no copiarán en caché una petición por la cual  DONOTCACHEPAGE está definida como true.

Invalidar el DONOTCACHEPAGE a través de un filtro en WP Rocket

Por cuanto la constante  DONOTCACHEPAGE pueda resultar útil, hay casos en los cuales se hace necesario invalidarla para que algunas peticiones puedan ser copiadas en la caché, a pesar de que un plugin de terceros intente aplicar la exclusión de la caché. 

WP Rocket te tiene cubierto en estos casos. Todo lo que necesitars hacer es configurar como  true un filtro especial en WP Rocket, y nuestro plugin ignorará la constante DONOTCACHEPAGE :

add_filter( 'rocket_override_donotcachepage', '__return_true', PHP_INT_MAX );

Puedes copiar el código de arriba en un MU plugin personalizado:

MU Plugin personalizado

Sigue las instrucciones generales de este artículo:
¿Cómo hacer un MU-plugin personalizado?

1

Crea una carpeta llamada mu-plugins dentro de wp-content
En caso de que la carpeta mu-plugins exista ya, no es necesario crearla otra vez, usa la existente.

2

Usando un editor de texto básico crea un nuevo fichero e introduce estas lineas de código:

<?php
defined( 'ABSPATH' ) or die( 'Cheatin&#8217; uh?' );
/**
 * Plugin Name: WP Rocket | Force Caching
 * Description: Overrides the DONOTCACHEPAGE constant in order to force caching.
 * Author:      WP Rocket Support Team
 * Author URI:  http://wp-rocket.me/
 * License:     GNU General Public License v3 or later
 * License URI: http://www.gnu.org/licenses/gpl-3.0.html
 */

add_filter( 'rocket_override_donotcachepage', '__return_true', PHP_INT_MAX );
	
3
Guarda el archivo como  wp-rocket-force-caching.php
4

Sube este fichero a la carpeta mu-plugins que has creado al punto 1.

5

Finalmente, asegúrate de desactivar y re-activar WP Rocket.

Ejemplo: Páginas en caché para miembros

Imaginamos que tengas un plugin de afiliación para servir un contenido específico solamente para los usuarios conectados a tu sitio. Te gustaría habilitar la opción de WP Rocket Caché para usuarios conectados y así ofrecer páginas más rápidas desde la caché para tus miembros conectados.

Algunos plugins de afiliación definen la constante DONOTCACHEPAGE para usuarios conectados, porqué comunemente no se sirve contenido estáticos a los miembros, si no dinámico. 

En nuestro ejemplo, todavía, tu objetivo sería enviar a tus miembros conectados contenido estático adicional respecto a lo que ya ven los usuarios no conectados. Por esta razón necesitarías invalidar la directiva DONOTCACHEPAGE establecida por el plugin de afiliación y permitir a la opción Caché para usuarios conectados de funcionar correctamente. 

Para hacerlo, la cosa mejor es crear un MU plugin personalizado como descrito precedentemente.