WordPress Hosting

wp rocket cabecera naranja

Cómo personalizar profesionalmente la caché de usuario de WP Rocket

Si por algo me encanta el plugin WP Rocket para optimizar todo tipo de sitios de es, en gran parte, por la facilidad de personalizar al máximo sus funcionalidades, permitiéndote adaptar sus utilidades de optimización y mejora de rendimiento a las necesidades de cada web.

Entre estas herramientas, una bastante desconocida, pero sobre todo infrautilizada, es la posibilidad de gestionar la caché de los usuarios, de decidir a qué usuarios se les mostrará la versión almacenada en caché de la web o en tiempo real, sin caché.

Qué es la caché de usuario de WP Rocket

Cuando se activa la caché de usuario, WP Rocket crea un conjunto dedicado de archivos de caché para cada usuario de WordPress que inicia sesión.

Esta caché será diferente a la del resto de usuarios, pues almacenará la experiencia de navegación específica de cada usuario, y por tanto estando totalmente adaptada a sus usos de la web.

La caché de usuario será diferente a la de usuarios no conectados, que se generará de la manera habitual.

Es un tipo de caché especialmente útil en webs de membresía, donde es especialmente importante.

Cuando se activa la caché de usuario se genera un conjunto de archivos de caché de página completa de toda la web para usuarios no conectados, y además una serie de archivos de caché personalizados para cada usuario conectado.

Cómo activar y desactivar la caché de usuario de WP Rocket

Para empezar por lo más básico, puedes activar o desactivar la caché de usuario de WP Rocket desde los ajustes del plugin, en la sección «Add-on».

Por defecto viene inactiva nada más instalar WP Rocket, así que si la necesitas tendrás que activarla.

activar cache usuario wp rocket

¿Por qué debería desactivar la caché de usuario de WP Rocket?

Aunque sea tentador activar la caché de usuario de WP Rocket, para que tu web también vaya ultrarrápida para ti, como usuario conectado, como administrador, mi consejo es que no lo hagas, salvo que el objetivo de la activación de la caché de usuario sea para tus usuarios, no para ti.

No lo recomiendo porque son muchas las situaciones en que, como administrador, la caché de usuario te va a ser más molesta que útil.

Ya sea que estés probando funcionalidades o haciendo cambios de diseño, no vas a querer entre tú y la realidad de tu web una caché que se empeñe en mostrarte tu web como era antes del cambio, en vez de mostrarte los cambios.

Si ya es molesta para este tipo de tareas la caché normal de WP Rocket, aunque puedas saltártela, seguro que no vas a querer tener una caché específica y personalizada.

Cómo personalizar la desactivación de caché de usuario de WP Rocket

Llegados a este punto, seguro que tienes claro que hay situaciones en las que la desactivación de la caché de usuario de WP Rocket o no funcionará o en las que querrás realizar alguna personalización, como por ejemplo, desactivar la caché únicamente a ciertos usuarios.

Vamos a ver cómo tomar el control total de la caché de usuario de WP Rocket.

Desactivar caché de WP Rocket a todos los usuarios conectados

Si te encuentras en la situación en la que no has activado la caché de usuario pero se sigue generando, con este código puedes forzar del todo a que no se cree la caché de usuario de WP Rocket:

/* Desactivar completamente cache usuario wp rocket */
function disable_cache_for_logged_in_user() {
  // Comprobamos si el usuario esta conectado
  if( is_user_logged_in() ) {
    add_filter( 'do_rocket_generate_caching_files', '__return_false' );
  }
}
add_action( 'init', __NAMESPACE__ . '\disable_cache_for_logged_in_user' );

// Vaciamos la cache
function clean_wp_rocket_cache() {
  if ( ! function_exists( 'rocket_clean_domain' ) ) {
    return false;
  }
rocket_clean_domain();
}
register_activation_hook( __FILE__, __NAMESPACE__ . '\clean_wp_rocket_cache' );

Con este código se vacía caché y se purga completamente toda posible caché de usuario cuando un usuario está conectado.

Desactivar caché de WP Rocket a un perfil concreto de usuario

Puedes verte en la situación en que haya algún perfil de usuario para el que no quieras que se active su caché específica de usuario, aunque esté activa para el resto. En este caso el código a aplicar sería como este:

/* Desactivar cache usurio wp rocket para admins */
function handle_cache_for_admins() {
// Comprobamos si el usuario es admin
if ( ! current_user_can( 'administrator' ) ) {
return false;
}

//  Nos aseguramos que wp rocket este activo
if ( ! function_exists( 'get_rocket_option' ) ) {
return false;
}

// Nos aseguramos que este activa la cache de usuario
if ( ! get_rocket_option( 'cache_logged_user' ) ) {
return false;
}

// Mostramos aviso de admin cuando este activa la cache de usuario
if( class_exists( 'WP_Rocket\Buffer\Config' ) ) { 
$config_dir_path = array();
$config = new \WP_Rocket\Buffer\Config( $config_dir_path );
if ( $config->get_config( 'common_cache_logged_users' ) ) {
add_action( 'admin_notices', __NAMESPACE__ . '\maybe_render_admin_notice' );
}
}
 
// Mostramos aviso de admin cuando este activa la cache de usuario obsoleta
if ( get_rocket_option( 'common_cache_logged_users' ) ) {
add_action( 'admin_notices', __NAMESPACE__ . '\maybe_render_admin_notice' );
return false;
}
 
// Evitamos generar cache de usuario para los administradores
add_action( 'template_redirect', __NAMESPACE__ . '\donotcache', 1 );
return true;
}
add_action( 'init', __NAMESPACE__ . '\handle_cache_for_admins' );

// Impedir cache y optimizaciones
function donotcache() {
if ( ! defined( 'DONOTCACHEPAGE' ) ) {
define( 'DONOTCACHEPAGE', true );
//error_log( date('[ Y-m-d H:i:s ] ', $_SERVER['REQUEST_TIME'] ) ."donotcache\n", 3, ABSPATH . "/no_admin_cache.log" );
}
 
if ( ! defined( 'DONOTROCKETOPTIMIZE' ) ) {
define( 'DONOTROCKETOPTIMIZE', true );
//error_log( date('[ Y-m-d H:i:s ] ', $_SERVER['REQUEST_TIME'] ) ."donotoptimize\n", 3, ABSPATH . "/no_admin_cache.log" );
}
return true;
}

// Procesar aviso de admin en pagina de ajustes de wp rocket
function maybe_render_admin_notice() {
//error_log( date('[ Y-m-d H:i:s ] ', $_SERVER['REQUEST_TIME'] ) ."maybe_render_admin_notice\n", 3, ABSPATH . "/no_admin_cache.log" );
if ( ! maybe_is_admin_on_settings_page() ) {
//error_log( date('[ Y-m-d H:i:s ] ', $_SERVER['REQUEST_TIME'] ) ."Returned in line ". __LINE__ . "\n", 3, ABSPATH . "/no_admin_cache.log" );
return false;
}
printf(
'<div class="notice notice-warning"><p>%s</p></div>',
__( '<strong>Sin caché activa para administradores:</strong> Estás usando la misma caché que el resto de usuarios. Verás la web con caché normal.' )
);
}

// Comprobacion de permisos para filtrado
function maybe_is_admin_on_settings_page() {
if ( 'admin_notices' !== current_filter() ) {
//error_log( date('[ Y-m-d H:i:s ] ', $_SERVER['REQUEST_TIME'] ) ."Returned in line ". __LINE__ . "\n", 3, ABSPATH . "/no_admin_cache.log" );
return false;
}

// Solo si esta activo wp rocket
if ( ! function_exists( 'get_rocket_option' ) ) {
//error_log( date('[ Y-m-d H:i:s ] ', $_SERVER['REQUEST_TIME'] ) ."Returned in line ". __LINE__ . "\n", 3, ABSPATH . "/no_admin_cache.log" );
return false;
}

// Solo para admins
if ( ! current_user_can( apply_filters( 'rocket_capacity', 'manage_options' ) ) ) {
//error_log( date('[ Y-m-d H:i:s ] ', $_SERVER['REQUEST_TIME'] ) ."Returned in line ". __LINE__ . "\n", 3, ABSPATH . "/no_admin_cache.log" );
return false;
}

// Determinar id de pantalla
$current_screen      = get_current_screen();
$rocket_wl_name      = get_rocket_option( 'wl_plugin_name', null );
$wp_rocket_screen_id = isset( $rocket_wl_name ) ? 'settings_page_' . sanitize_key( $rocket_wl_name ) : 'settings_page_wprocket';

// Solo en la pagina de ajustes de wp rocket
if ( $wp_rocket_screen_id !== $current_screen->base ) {
//error_log( date('[ Y-m-d H:i:s ] ', $_SERVER['REQUEST_TIME'] ) ."Returned in line ". __LINE__ . "\n", 3, ABSPATH . "/no_admin_cache.log" );
return false;
}
return true;
}

Con este código se desactiva la caché de usuario para los usuarios conectados con perfil de administrador (administrator) pero no para el resto de usuarios conectados.

Otro código que puedes utilizar con el mismo objetivo pero menos comprobaciones y avisos sería este:

/* Desactivar cache de usuario de wp rocket para editores */
function disable_cache_for_editor_role() {
// Comprobamos si el usuario esta conectado
if ( is_user_logged_in() ) {
$user = wp_get_current_user();
// Comprobamos si el usuario tiene perfil de editor
if ( in_array( 'editor', (array) $user->roles ) ) {
add_filter( 'do_rocket_generate_caching_files', '__return_false' );
}
}
}
add_action( 'init', __NAMESPACE__ . '\disable_cache_for_editor_role' );

// Vaciamos caches
function clean_wp_rocket_cache() {
if ( ! function_exists( 'rocket_clean_domain' ) ) {
return false;
}
rocket_clean_domain();
}
register_activation_hook( __FILE__, __NAMESPACE__ . '\clean_wp_rocket_cache' );

Y si quieres que aplique a varios perfiles, simplemente cámbialo así:

/* Desactivar cache de usuario de wp rocket para editores y admins */
function disable_cache_for_main_roles() {
// Comprobamos si el usuario esta conectado
if ( is_user_logged_in() ) {
$user = wp_get_current_user();
// Comprobamos si el usuario es editor o admin
if ( array_intersect( [ 'editor', 'administrator' ], (array) $user->roles ) ) {
add_filter( 'do_rocket_generate_caching_files', '__return_false' );
}
}
}
add_action( 'init', __NAMESPACE__ . '\disable_cache_for_main_roles' );

// Vaciamos caches
function clean_wp_rocket_cache() {
if ( ! function_exists( 'rocket_clean_domain' ) ) {
return false;
}
rocket_clean_domain();
}
register_activation_hook( __FILE__, __NAMESPACE__ . '\clean_wp_rocket_cache' );

Desactivar caché de usuario de WP Rocket para usuarios específicos

¿Y si quieres desactivar la caché de usuario de WP Rocket para usuarios concretos, da igual su perfil?

Aquí lo tienes…

/* Desactivar cache usuario wp rocket usuarios concretos */
function disable_cache_for_specific_users() {
// Comprobamos que el usuario este conectado
if( is_user_logged_in() ) {
$current_user = wp_get_current_user();

// Lista de nombres de usuario o emails para los que desactivar la cache de usuario
$no_cache_users = array(
'[email protected]', // Por email
'jose_martinez', // Por nombre de usuario
'libelulilla' // Otro usuario
);

// Comprobamos el array anterior de la lista
if ( in_array( $current_user->user_login, $no_cache_users ) || 
in_array( $current_user->user_email, $no_cache_users ) ) {
add_filter( 'do_rocket_generate_caching_files', '__return_false' );
}
}
}
add_action( 'init', __NAMESPACE__ . '\disable_cache_for_specific_users' );

// Vaciamos la cache
function clean_wp_rocket_cache() {
if ( ! function_exists( 'rocket_clean_domain' ) ) {
return false;
}
rocket_clean_domain();
}
register_activation_hook( __FILE__, __NAMESPACE__ . '\clean_wp_rocket_cache' );

En este caso solo tenemos que ir añadiendo al array la lista de nombres de usuario o emails que queremos excluir de la caché de usuario.

Misma caché de usuario para todos los usuarios conectados

Para terminar, nos ponemos en caso raro, pero que puede darse, y es una situación en la que quieras que todos los usuarios conectados tengan la misma caché de usuario (evitar a toda costa en tiendas):

/* Misma cache de usuario de wp rocket a todos los usuarios conectados */
add_action( 'update_option', function( $option_name, $old_value, $value ) {
if ( $option_name !== 'wp_rocket_settings' ) { 
return;
}
if ( $value['cache_logged_user'] ) {
add_filter( 'rocket_common_cache_logged_users', '__return_true' );
}
else {
remove_filter( 'rocket_common_cache_logged_users', '__return_true' );
}
}, 9999, 3 );

if ( get_option( 'wp_rocket_settings', [] )['cache_logged_user'] ) {
add_filter( 'rocket_common_cache_logged_users', '__return_true' );
}
else {
remove_filter( 'rocket_common_cache_logged_users', '__return_true' );
}

function flush_wp_rocket() {
if ( ! function_exists( 'rocket_generate_config_file' ) ) {
return false;
}

rocket_generate_config_file();
}
register_activation_hook( __FILE__, __NAMESPACE__ . '\flush_wp_rocket' );


// Vaciamos las caches
function deactivate() {
if ( ! is_plugin_active( 'wp-rocket/wp-rocket.php' ) ) {
return false;
}
remove_filter( 'rocket_common_cache_logged_users', '__return_true' );
flush_wp_rocket();
}
register_deactivation_hook( __FILE__, __NAMESPACE__ . '\deactivate' );

¿Cómo añado estos códigos?

Hay varias maneras de añadir códigos como estos u otros que encuentres en este blog o por ahí con los que personalizar tu web, aquí te dejo unas referencias para que tú elijas:


Nada más (creo). Si se me ha pasado algo o tienes alguna duda dímelo abajo en los comentarios, y si quieres conseguir WP Rocket con un descuentazo aprovecha ahora que están de rebajas.

Compartir en redes
Resumir con IA

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en las estrellas para valorarlo!

Promedio de puntuación 5 / 5. Total de votos: 4

¡Todavía no hay votos! Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en las redes sociales!

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!



Sobre el autor

1 comentario en “Cómo personalizar profesionalmente la caché de usuario de WP Rocket”

  1. Lidia Marbán

    Muy práctico y útil tu consejo y me viene como anillo al dedo precisamente hoy.

    ¡Gracias por el post! Me encanta poderle sacar aun más partido o rendimiento al WP Rocket.

Los comentarios están cerrados.

Scroll al inicio