Empêcher WP Rocket de mettre en cache les pages WooCommerce filtrées
· par Daniel
Si vous utilisez WP Rocket avec le préchargement et un plugin de filtres comme Filter Everything Pro, votre base de données ET votre dossier de cache peuvent exploser. Nous avions un site d’environ 2 000 produits seulement, mais avec 100 attributs filtrables.
Résultat : plus de 2 millions d’entrées dans la table wp_rocket_cache et un dossier de cache atteignant 200 Go. Pour y remédier, nous avons empêché WP Rocket de mettre en cache les pages de catégories WooCommerce filtrées.
L’extrait de code suivant a résolu notre problème :
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 );
Mise à jour 2025
En plus du code ci-dessus, ajoutez celui ci-dessous. Amazonbot, par exemple, explore les sites de manière très intensive : vous pouvez le bloquer via .htaccess, et aussi ne pas mettre en cache les URL filtrées ni générer de CSS pour elles.
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' );
Code .htaccess
# Block Harmful RobotRewriteEngine On RewriteCond %{HTTP_USER_AGENT} (amazonbot|semrushbot|ahrefsbot) [NC] RewriteRule (.*) - [F,L] # END Block Harmful Robot