Skip to content

Nel web server Nginx che ospita questo sito web, ho diversi sistemi di caching, come ad esempio opcache , Memcached e fastCGI. Sono ottimi sistemi per rendere il sito web veloce e scalabile, ma ogni volta che aggiorno WordPress o qualche plugin, è opportuno cancellare la cache.

E poi? Qundo si rigenera? Per rigenerarla dovrei attendere che un bot o un utente passi sulle varie pagine così che il server rigeneri i file di cache pagina per pagina. Questo metodo chiaramente non mi piace.

Per risolvere questo problema ho creato un piccolo plugin WordPress: EVE Rigeneratore di Cache.

Questo plugin WordPress è uno strumento essenziale per la mia gestione del sito dato che necessito di mantenere le prestazioni ottimali sempre. È particolarmente utile dopo aver effettuato aggiornamenti al CMS o ad altre componenti del sito, momenti in cui è fondamentale rigenerare la cache rapidamente per garantire che le modifiche siano riflettute agli utenti finali senza ritardi o problemi di visualizzazione.

Il plugin automatizza il processo di “ping” degli URL presenti sul sito per forzare la rigenerazione della cache. Il plugin in pratica fa partire dal client (il browser) chiamate HTTP verso le singole pagine del siuto web.

Attraverso un’interfaccia semplice ed intuitiva, inserita direttamente nell’area amministrativa di WordPress, posso avviare il processo di rigenerazione della cache con un semplice click su un pulsante dedicato.

Lo sviluppo del plugin si basa su tecnologie web standard, quali AJAX per le chiamate asincrone al server, assicurando così un’integrazione fluida e senza interruzioni con l’infrastruttura esistente di WordPress. Inoltre, la sicurezza è una priorità: solo gli utenti con i permessi di gestione del sito possono attivare il processo di rigenerazione della cache, proteggendo il sito da potenziali abusi.

Il plugin è composto da due file, un file php e un file js.

File php

  • file name: eve_url_pinger.php
<?php
/*
Plugin Name: EVE Rigeneratore di Cache
Description: Un plugin per rigenerare la cache del sito pingando gli URL.
Version: 1.0
Author: Giovanni Sacheli
*/

// Aggiungi una pagina di menu nel backend
add_action('admin_menu', 'aggiungi_pagina_rigenerazione_cache');
function aggiungi_pagina_rigenerazione_cache() {
    add_menu_page('Rigenera Cache', 'Rigenera Cache', 'manage_options', 'rigenera-cache', 'pagina_rigenerazione_cache_html', 'dashicons-update');
}

// Contenuto della pagina del plugin
function pagina_rigenerazione_cache_html() {
    ?>
    <div class="wrap">
        <h1>Rigenera Cache</h1>
        <button id="rigenera-cache">Rigenera Cache</button>
        <div id="risultato"></div>
    </div>
    <?php
}

// Aggiungi azioni AJAX per ottieni_urls
add_action('wp_ajax_ottieni_urls', 'ottieni_urls_handler');
function ottieni_urls_handler() {
    if (!current_user_can('manage_options')) {
        wp_die('Non autorizzato');
    }

    $args = array(
        'post_type' => 'any',
        'posts_per_page' => -1,
        'post_status' => 'publish',
    );

    $query = new WP_Query($args);
    $urls = [];

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $urls[] = get_permalink();
        }
    }

    echo json_encode($urls);
    wp_die();
}

add_action('wp_ajax_pinga_url', 'pinga_url_handler');
function pinga_url_handler() {
    if (!current_user_can('manage_options')) {
        wp_die('Non autorizzato');
    }

    $url = isset($_POST['url']) ? esc_url_raw($_POST['url']) : '';

    if (!empty($url)) {
        wp_remote_get($url); // Effettua il ping dell'URL
        echo "Pingato: $url";
    } else {
        echo "URL non valido";
    }

    wp_die();
}

// Enqueue script JS per AJAX
add_action('admin_enqueue_scripts', 'enqueue_rigenera_cache_script');
function enqueue_rigenera_cache_script($hook) {
    // Assicurati che lo script sia aggiunto solo alla pagina del plugin
    if ('toplevel_page_rigenera-cache' !== $hook) {
        return;
    }
    wp_enqueue_script('rigenera-cache-script', plugin_dir_url(__FILE__) . 'rigenera-cache.js', array('jquery'), null, true);
    wp_localize_script('rigenera-cache-script', 'ajax_object', array('ajax_url' => admin_url('admin-ajax.php')));
}

File JS

  • file name: rigenera-cache.js
jQuery(document).ready(function($) {
    $('#rigenera-cache').on('click', function() {
        $.ajax({
            url: ajax_object.ajax_url,
            type: 'POST',
            data: {
                action: 'ottieni_urls'
            },
            success: function(response) {
                var urlsToPing = JSON.parse(response);
                var currentIndex = 0;

                function pingNextUrl() {
                    if (currentIndex >= urlsToPing.length) {
                        $('#risultato').html('Cache rigenerata con successo per tutti gli URL!');
                        return;
                    }

                    //$('#risultato').html('Rigenerazione cache per: ' + urlsToPing[currentIndex] + ' (' + (currentIndex + 1) + '/' + urlsToPing.length + ')');
					$('#risultato').html('('+(currentIndex + 1) + '/' + urlsToPing.length + ') '+'Rigenerazione cache'+' : ' + urlsToPing[currentIndex]);

                    $.ajax({
                        url: ajax_object.ajax_url,
                        type: 'POST',
                        data: {
                            action: 'pinga_url',
                            url: urlsToPing[currentIndex]
                        },
                        success: function(response) {
                            console.log(response);
                            currentIndex++;
                            setTimeout(pingNextUrl, 1); // Aspetta 1 secondo prima di procedere
                        }
                    });
                }

                pingNextUrl();
            }
        });
    });
});

Conclusione

Grazie all’uso di chiamate AJAX, il plugin consente una gestione asincrona e non intrusiva del processo, direttamente dall’interfaccia amministrativa di WordPress. Tuttavia, è importante ricordare che poiché le operazioni sono innescate e gestite attraverso la finestra del browser, la chiusura di quest’ultimo interromperà il processo di rigenerazione. Questo comportamento sottolinea l’importanza di mantenere la pagina aperta fino al completamento del processo.

Dal punto di vista tecnico e della compatibilità, il plugin è progettato per essere il più semplice e leggero possibile, riducendo al minimo il rischio di conflitti con altri plugin o con il tema in uso.

Inoltre, la possibilità di personalizzare l’intervallo tra una chiamata AJAX e l’altra, tramite la modifica del valore di timeout nel file JavaScript, mi offre un controllo granulare sulla frequenza di rigenerazione della cache, permettendo di bilanciare tra efficacia e utilizzo delle risorse del server.

Il plugin non effettua operazioni di salvataggio dati nel database, garantendo così una pulizia e manutenzione minima dell’installazione di WordPress. Questa caratteristica assicura che il plugin possa essere utilizzato senza preoccupazioni di sovraccarico o di residui dati che potrebbero influenzare le prestazioni del sito a lungo termine.

Pensi ti possa essere utile questo plugin? Prendilo, è gratuito, ma lascia un commento :)

Articoli correlati

Autore

Commenti |2

Lascia un commento Lascia un commento
  1. Luca 1 commento

    Seguo da tanto tempo ormai la newsletter di Eve, fonte preziosa di formazione e aggiornamenti di qualità. Nonostante la consulenza SEO non sia il principale obiettivo della mia azienda, resto affezionato a questo canale perché mi arricchisce su tutti gli aspetti della gestione dei servizi di rete e mi aiuta a tenermi aggiornato con argomenti interessanti e specialistici che raramente ho trovato proposti su altre blasonate piattaforme divulgative. Vi meritate un sincero grazie e… continuate così! ;)

    1. Giovanni Sacheli 760 risposte

      Ciao Luca, che bel commento, non hai idea di quanto mi abbia fatto piacere leggerlo. Grazie!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Ultimi articoli aggiornati

Richiedi un preventivo SEO e Google Ads

Porta il tuo sito web al livello successivo con l’esperienza di EVE Milano. La nostra agenzia di Search Marketing ha ricevuto oltre 1172 richieste di preventivo, un segnale chiaro della fiducia che imprenditori e manager, come te, ripongono nella nostra specializzazione tecnica e verticale nella SEO e PPC. Se la tua organizzazione cerca competenze specifiche per emergere nei risultati di Google, noi siamo pronti a fornire quel valore aggiunto. Richiedi un preventivo ora e scopri la differenza tra noi e gli altri.
Richiedi un preventivo

Vuoi ricevere un avviso al mese con le nuove guide pubblicate?

Iscriviti alla newsletter!

Informativa sui cookies

Noi e terze parti selezionate utilizziamo cookie o tecnologie simili per finalità tecniche e, con il tuo consenso, anche per le finalità di esperienza e misurazione come specificato nella cookie policy. Puoi liberamente prestare, rifiutare o revocare il tuo consenso, in qualsiasi momento, accedendo al pannello delle preferenze. Il rifiuto del consenso può rendere non disponibili le relative funzioni. Usa il pulsante “Accetta” per acconsentire. Usa il pulsante “Rifiuta” per continuare senza accettare.