Andrea Beggi

"I'm brave but I'm chicken shit"

Modificare il periodo di refresh dei feed esterni in WordPress

Sul nuovo template ho messo in homepage alcuni “box”; un paio di questi recuperano le informazioni da un feed esterno e le ripubblicano. Per questo scopo WordPress ha una funzione apposita: fetch_feed, che restituisce un oggetto SimplePie utilizzabile per i propri scopi.

I risultati vengono cachati e ricaricati alla scadenza, ma purtroppo non c’è modo di impostare dalla funzione il tempo di refresh del feed, che di default è di 12 ore; specie per Twitter tale valore è un po’ troppo basso per i miei gusti, e ho cercato di capire se fosse modificabile. Il problema è banale, ma su Google i risultati sono viziati: la stragrande maggioranza riguarda i feed generati da WordPress, non quelli letti dall’esterno.

Alla fine ho capito che è necessario modificare una funzione, e questo introduce un secondo problema: il file da editare fa parte del core di WordPress, che non è mai consigliabile modificare. Inoltre il lavoro andrebbe perso al prossimo aggiornamento. La soluzione è fare la modifica nel file functions.php del tema, aggiungendo un filtro fatto così:

add_filter( 'wp_feed_cache_transient_lifetime', create_function('$a', 'return 3600;') );

Questa riga altera il comportamento predefinito della funzione in modo che i feed vengano ricaricati ogni ora (3600 secondi) dato che modifica il valore di wp_feed_cache_transient_lifetime.

E tutto funziona come per magilla.

 


Pubblicato

in

da

Commenti

5 risposte a “Modificare il periodo di refresh dei feed esterni in WordPress”

  1. Avatar flod

    Primo risultato della ricerca su Google di “frequenza aggiornamento feed wordpress” 😛

    Battute a parte, a volte ho visto un comportamento un po’ strano di quel “lifetime” (il feed non si aggiornava comunque dopo il tempo previsto).

    Altra info utile (cancellare a mano la cache dei feed)
    http://wpengineer.com/2114/delete-all-feed-cache-via-sql-in-wordpress/

    Non ne ho alcuna certezza (mai avuto il tempo di indagare) ma ho la sensazione che anche Wp-Super-Cache vada a cancellare questa cache.

  2. Avatar Andrea

    Secondo me dipende dal fatto che dipende tutto da wp_cron? Se nessuno visita il blog, come fa a partire il trigger? (Mi chiedo, eh?)

  3. Avatar flod

    Il sito in questione non ha molte visite ma 400/500 contatti al giorno li fa/faceva, per cui non credo fosse quello il problema.

    Il feed era impostato per aggiornarsi ogni 30 minuti, a volte toccava andare a mano a cancellare il db usando le indicazioni del link (tipo quando il cliente chiedeva “perché il video non è ancora sul sito? eh? eh?”).

    Alla fine non ho mai indagato a fondo, e da quando sono tornato a Wp-Super-Cache dopo un breve periodo con Quick Cache il problema non l’ho più riscontrato (per cui potrebbe anche essere questo il colpevole).

  4. Avatar whiletrue

    A questo spunto interessante aggiungiamo che si potrebbe inserire la funzione “remove_filter”, con gli stessi parametri, per ripristinare il tempo di cache predefinito (12 ore) dopo la chiamata “fetch_feed” al feed che vogliamo monitorare con frequenza maggiore. Già che ci siamo, suggeriamo di non impostare tempi minori dei 30 minuti citati da Andrea per i feed di Twitter, che hanno un limite di 150 richieste orarie.

    @flod: come mai da Quick Cache sei tornato a WP-Super-Cache?

  5. Avatar flod

    @whiletrue
    Scusa, mi ero perso la risposta 😉

    Quick Cache: ho l’impressione che sia più pesante in termini di utilizzo di memoria, ma è solo una sensazione.

    Il mio problema principale è che pubblicando un post la pagina iniziale non viene aggiornata, per cui il cliente chiamava chiedendo perché lui vedesse l’articolo urgentissimo in home page e gli altri no (e, secondo problema, non essendo amministratore non poteva nemmeno utilizzare il pulsante per svuotare la cache).