Impedire a WP Rocket di mettere in cache le pagine WooCommerce filtrate
· di Daniel
Se usi WP Rocket con il preloading insieme a un plugin di filtri come Filter Everything Pro, il database E la cartella della cache possono esplodere. Avevamo un sito con solo circa 2000 prodotti, ma con 100 attributi filtrabili.
Il risultato era una tabella wp_rocket_cache con oltre 2 milioni di righe e una cartella della cache arrivata a 200 GB. Per risolvere abbiamo deciso di impedire a WP Rocket di mettere in cache le pagine di categoria WooCommerce filtrate.
Questo snippet di codice ha risolto il 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 );
Aggiornamento 2025
Oltre al codice qui sopra dovresti aggiungere anche quello qui sotto. Amazonbot, ad esempio, scansiona i siti in modo molto intenso: puoi bloccarlo tramite .htaccess e inoltre non mettere in cache gli URL filtrati né generare il CSS.
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' );
Codice .htaccess
# Block Harmful RobotRewriteEngine On RewriteCond %{HTTP_USER_AGENT} (amazonbot|semrushbot|ahrefsbot) [NC] RewriteRule (.*) - [F,L] # END Block Harmful Robot