Disabilitare la cancellazione automatica della cache

Ci sono molte azioni che attivano una cancellazione parziale o totale della cache.

Ecco le più comuni: 

  • Ritardo cancellazione cache

    L'intera cache sarà cancellata automaticamente in base alla periodicità che avrai indicato in questo campo (in fondo alla sezione Opzioni di Base)
  • Nuovo contenuto

    Quando pubblichi nuovo contenuto sul tuo sito o aggiorni/modifichi quello già esistente, la cache relativa a tale contenuto o ad altro a esso collegato (es. gli archivi delle tassonomie) verrà cancellata e pre-caricata. 
    Per maggiori info:  Come viene pre-caricata la cache?

Ecco invece la lista delle azioni che attivano una cancellazione totale della cache:

  • cambiare tema
  • aggiungere/aggiornare/cancellare utenti (se hai un sito di e-commerce con molti ordini, ognuno di essi potrebbe creare nuovi utenti e quindi provocare frequenti cancellazioni della cache)
  • aggiornare i menu di navigazione
  • aggiornare le opzioni del tema
  • aggiornare / cambiare i widget della barra laterale
  • aggiornare categorie, tag o struttura dei permalink
  • creare / aggiornare / cancellare dei termini
  • creare / aggiornare / cancellare dei links
    (i.e. i post della tipologia  Link che sono stati rimossi dal core WordPress nella v3.5, però ancora possono essere usati tramite plugin)
  • salvataggio di qualsiasi opzione tramite il Customizer
  • il tema Avada cancella la sua propria cache

Azioni che attivano una cancellazione parziale della cache:

  • pubblicare, modificare e cancellare post o pagine
  • aggiornare i commenti in un post

Impedire la cancellazione automatica della cache

Se vuoi impedire il funzionamento di una delle funzioni sopra citate, puoi farlo molto semplicemente usando un MU plugin.

<?php
/**
 * Plugin Name: WP Rocket | Disable Automaticcache purge
 * Description: Disables automatic cache purging in WP Rocket.
 * Version:     2015.12
 * Author:      Jonathan (WP Rocket 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
 */

defined( 'ABSPATH' ) or die( 'Cheatin&#8217; uh?' );

// Disables the deletion of the entire cache.
add_action( 'wp_rocket_loaded', 'rocket_remove_all_purge_hooks' );

/**
 * Remove all of WP Rocket’s cache purging actions.
 *
 * @return void
 */
function rocket_remove_all_purge_hooks() {

	// WP core action hooks where rocket_clean_domain() gets hooked into.
	$clean_domain_hooks = array(
		// When user changes the theme
		'switch_theme',
		// When a user is added
		'user_register',
		// When a user is updated
		'profile_update',
		// When a user is deleted
		'deleted_user',
		// When a custom menu is updated
		'wp_update_nav_menu',
		// When any theme modifications are updated
		'update_option_theme_mods_' . get_option( 'stylesheet' ),
		// When you change the order of widgets
		'update_option_sidebars_widgets',
		// When category permalink prefix is update
		'update_option_category_base',
		// When tag permalink prefix is update
		'update_option_tag_base',
		// When permalink structure is update
		'permalink_structure_changed',
		// When a term is created
		'create_term',
		// When a term is updated
		'edited_terms',
		// When a term is deleted
		'delete_term',
		// When a link (post type) is added
		'add_link',
		// When a link (post type) is updated
		'edit_link',
		// When a link (post type) is deleted
		'delete_link',
		// When resulty are saved in the Customizer
		'customize_save',
		// When Avada theme purges its own cache
		'avada_clear_dynamic_css_cache',
	);

	// WP core action hooks where rocket_clean_post() gets hooked into.
	$clean_post_hooks = array(
		// Disables the refreshing of partial cache when content is edited
		'wp_trash_post',
		'delete_post',
		'clean_post_cache',
		'wp_update_comment_count',
	);

	// Remove rocket_clean_domain() from core action hooks.
	foreach ( $clean_domain_hooks as $key => $handle ) {
		remove_action( $handle, 'rocket_clean_domain' );
	}

	// Remove rocket_clean_post() from core action hooks.
	foreach ( $clean_post_hooks as $key => $handle ) {
		remove_action( $handle, 'rocket_clean_post' );
	}
}

Come creare un MU Plugin

  1. Creare la nuova cartella mu-plugins dentro la directory wp-content
  2. Usa un editore di testo, crea un nuovo file e incolla lo snippet. Ricorda di non usare Rich Text, ma semplice testo per non compromettere il tuo codice!
  3. Salva il file come: wprocket-no-purge.php (in realtà puoi chiamarlo come vuoi, questo è solo un suggerimento) 
  4. Carica il file dentro la cartella mu-plugins
  5. Disattiva e riattiva WP Rocket

Se vuoi rimuovere solo alcune delle azioni che attivano una cancellazione della cache, puoi rimuovere o "commentare" le linee di codice o gli hook di cui non hai bisogno