Evitar que WP Rocket guarde en caché las páginas filtradas de WooCommerce
· por Daniel
Si usa WP Rocket con precarga junto con un plugin de filtros como Filter Everything Pro, su base de datos Y su carpeta de caché pueden dispararse. Teníamos una web con solo unos 2.000 productos, pero con 100 atributos filtrables.
Esto llevó a más de 2 millones de entradas en la tabla wp_rocket_cache y a una carpeta de caché de hasta 200 GB. Para solucionarlo, impedimos que WP Rocket guardara en caché las páginas de categorías filtradas de WooCommerce.
El siguiente fragmento de código solucionó nuestro problema:
add_filter( 'rocket_preload_exclude_urls', function( $regexes, $url ) {
$url = untrailingslashit( $url );
if(function_exists('is_filtered')){
if ( is_filtered() ) {
$regexes[] = $url;
add_filter( 'do_rocket_generate_caching_files', '__return_false' );
}
}
if(function_exists('flrt_is_filter_request')){
if ( flrt_is_filter_request() ) {
$regexes[] = $url;
add_filter( 'do_rocket_generate_caching_files', '__return_false' );
}
}
return $regexes;
}, 10, 2 );
Actualización 2025
Además del código anterior, añada el de abajo. Amazonbot, por ejemplo, rastrea las webs de forma muy intensa: puede bloquearlo con .htaccess y, además, no guardar en caché las URL filtradas ni generar CSS para ellas.
function disable_cache_for_filtered_urls() {
if ( function_exists( 'flrt_is_filter_request' ) && flrt_is_filter_request() ) {
if ( ! defined( 'DONOTCACHEPAGE' ) ) {
define( 'DONOTCACHEPAGE', true ); // Disable WP Rocket caching
}
}
if(function_exists('is_filtered') && is_filtered()){
if ( ! defined( 'DONOTCACHEPAGE' ) ) {
define( 'DONOTCACHEPAGE', true ); // Disable WP Rocket caching
}
}
}
add_action( 'template_redirect', 'disable_cache_for_filtered_urls' );
Código .htaccess
# Block Harmful RobotRewriteEngine On RewriteCond %{HTTP_USER_AGENT} (amazonbot|semrushbot|ahrefsbot) [NC] RewriteRule (.*) - [F,L] # END Block Harmful Robot