W3 total cache - aggiornamento della cache programmaticamente

17 gen 2011, 15:20:04
Visualizzazioni: 40K
Voti: 26

Sto costruendo un sito web simile a Digg in WordPress.

Dopo aver installato W3 Total Cache, ho notato che alcuni elementi come il numero di voti (e gli ID dei votanti) per post vengono memorizzati nella cache anche se non dovrebbero esserlo (almeno non dopo che un utente vota per un articolo). Presumo che non sia possibile impedire che specifici elementi in una pagina vengano memorizzati nella cache (o lo è?), quindi ho pensato di attivare l'aggiornamento della cache della pagina programmaticamente.

Qualche suggerimento?

0
Tutte le risposte alla domanda 6
3
21

se vuoi svuotare la cache puoi farlo: il plugin ha delle funzioni apposite

<?php 

flush_pgcache()  //cache delle pagine
flush_dbcache()  //cache del database
flush_minify()  //cache minify
flush_all() //tutte le cache

?>

e devi solo chiamarla in questo modo:

<?php 
 $w3_plugin_totalcache->flush_all();
?>

e questa è sostanzialmente la risposta alla domanda nel titolo "aggiornare la cache programmaticamente"

17 gen 2011 19:23:06
Commenti

Puoi per favore definire esplicitamente come hai istanziato l'oggetto $w3_plugin_totalcache?

adamdport adamdport
27 feb 2014 17:35:50

Parzialmente utile, come hai istanziato quella variabile?

thephpdev thephpdev
23 gen 2017 14:29:53

dichiara una nuova istanza della classe, e poi fai riferimento a quel metodo. https://plugins.trac.wordpress.org/browser/w3-total-cache/trunk/CacheFlush.php. if(class_exists('CacheFlush') ){ $CacheFlush = new CacheFlush; $CacheFlush::flush_post(get_option('page_on_front')); }

RobBenz RobBenz
11 ott 2022 22:06:06
4
12

Per svuotare la cache di una singola pagina tramite l'ID del post in w3tc v0.9.3 ho scoperto che questo funziona:

if (function_exists('w3tc_pgcache_flush_post')){
 w3tc_pgcache_flush_post($post_id);
}
21 mar 2014 00:08:59
Commenti

Dove posizioneresti questo codice? Sembra che venga eseguito ad ogni caricamento della pagina (per quell'ID). Non c'è modo di prevenire completamente la cache?

s_ha_dum s_ha_dum
21 mar 2014 00:31:44

@s_ha_dum Potresti scoprire con quale hook possiamo usare questo codice?

Prafulla Kumar Sahu Prafulla Kumar Sahu
17 nov 2016 10:42:30

Non sono necessari hook extra se l'evento a cui si collega il tuo codice/plugin personalizzato viene eseguito dopo il caricamento dei plugin, cosa che tipicamente avviene. Tutte le funzioni disponibili sono in w3-total-cache-api.php nella directory del plugin W3TC.

Walf Walf
1 ago 2018 05:29:19

Grazie, questo mi è stato utile ora nel dicembre 2018. Avevo bisogno di un modo per svuotare la cache della home page una volta che il client visitava una determinata pagina (una pagina delle impostazioni per visualizzare quando un agente è disponibile). Questo è molto utile per pagine specifiche, ma sarebbe bello se ci fosse una funzione che svuotasse TUTTE le cache come fa Purge All Caches!

Jordan Carter Jordan Carter
1 dic 2018 23:47:22
2
11

La soluzione di Bainternet non sembra funzionare per me.

Sto utilizzando con successo questo snippet alternativo all'interno di un plugin, caricato all'azione admin_init:

// Svuota tutta la cache di W3 Total Cache
if( class_exists('W3_Plugin_TotalCacheAdmin') )
{
    $plugin_totalcacheadmin = & w3_instance('W3_Plugin_TotalCacheAdmin');

    $plugin_totalcacheadmin->flush_all();

    echo __('<div class="updated"><p>Tutte le cache di <strong>W3 Total Cache</strong> sono state svuotate con successo.</p></div>');
}

Spero che questo possa essere utile a qualcuno là fuori.

19 set 2011 19:02:40
Commenti

Posso confermare che la soluzione di kevinlearynet funziona con la versione 0.9.2.4 di W3 Total Cache. Ha smesso di funzionare per il mio plugin dopo quell'aggiornamento, e questa soluzione funziona perfettamente. Grazie! Paul.

User User
4 ott 2011 21:55:31

Sto cercando di eseguire questo dalla riga di comando. Posso chiederti come hai caricato la classe W3_Plugin_TotalCacheAdmin? Ho provato a richiedere wp-load.php senza successo.

adamdport adamdport
27 feb 2014 00:56:59
5
10

W3 Total Cache supporta la memorizzazione nella cache dei frammenti. Dalle FAQ:

Come si implementa la memorizzazione nella cache dei frammenti?

Modifica i tuoi template con la seguente sintassi per garantire che le funzionalità dinamiche rimangano tali:

Esempio 1:
<!-- mfunc qualsiasi codice PHP --><!-- /mfunc -->

Esempio 2:
<!-- mfunc -->qualsiasi codice PHP<!-- /mfunc -->

Esempio 3:
<!--MFUNC           -->
                                      echo rand();
<!--/mfunc -->

Esempio 4:
<!-- mclude percorso/del/file.php --><!-- /mclude -->

Esempio 5:
<!-- mclude -->percorso/del/file.php<!-- /mclude -->
17 gen 2011 16:06:28
Commenti

Grazie Rast. Ma quando uso uno degli esempi sopra, ottengo un errore Parse error: syntax error, unexpected '<'

user1567 user1567
17 gen 2011 16:34:55

@user1567 probabilmente hai una discrepanza con i tag di apertura/chiusura <?php ?>. Non li avevo ancora usati quindi non ho uno snippet pratico da mostrare.

Rarst Rarst
17 gen 2011 16:57:59

Per prima cosa, vorrei caricare functions.php senza memorizzarlo nella cache. Il seguente codice in functions.php ha scatenato l'errore sopra: <?php <!-- mclude -->require_once(functions2.php)<!-- /mclude --> ?> Cosa c'è di sbagliato nel codice?

user1567 user1567
17 gen 2011 17:20:31

@user1567 secondo gli esempi dovrebbe essere qualcosa come ?><!-- mclude -->functions2.php<!-- /mclude --><?php (credo :)

Rarst Rarst
17 gen 2011 17:36:08

Non riesco a far funzionare la cache dei frammenti. Il mio problema è descritto qui: http://stackoverflow.com/questions/31125413/w3-total-cache-and-fragment-cache-not-able-get-it-to-work

JackTheKnife JackTheKnife
30 giu 2015 19:38:48
2

Nessuna delle soluzioni precedenti ha funzionato nel mio plugin. Tuttavia, questa ha funzionato! Confermato che funziona per la versione 0.9.2.4 di w3tc.

if (function_exists('w3tc_dbcache_flush')) { w3tc_dbcache_flush(); }

Ho eseguito una query:

$wpdb->get_results( "SELECT `sb_settings`.`f_fb_app_id`,`sb_settings`.`f_fb_secret` FROM `sb_settings`" );

e sono rimasto sorpreso che i valori f_fb_secret e f_fb_app_id fossero sempre gli stessi. Era ovviamente la cache di w3tc che memorizzava il risultato della query. Quindi ho aggiunto un flush della cache del database nella mia pagina di modifica per la tabella sb_settings.

Se vuoi cancellare la cache delle pagine, usa semplicemente w3tc_pgcache_flush invece.

10 apr 2013 01:36:08
Commenti

Vorrei che chi ha votato negativamente dicesse perché l'ha fatto. C'è qualcosa di sbagliato nella mia risposta?

Elrinth Elrinth
12 apr 2013 11:19:36

Questo ha funzionato per me: if (function_exists('w3tc_flush_all')) { w3tc_flush_all(); }

Puoi trovare altre funzioni in w3-total-cache-api.php

P.O.W. P.O.W.
9 dic 2020 17:24:17
0

Utilizza questo snippet per assicurarti che il tuo codice PHP venga eseguito indipendentemente dal fatto che la cache sia attiva o disattivata. Sì, devi scrivere/chiamare la tua funzione due volte.

<!-- mfunc echo 'cache ATTIVA'; --><?php echo 'cache DISATTIVATA'; ?><!-- /mfunc -->


(Credo che) funzioni così:

  • Le condizioni mfunc sostituiscono i tag PHP.
  • Se la cache è DISATTIVATA, il PHP all'interno dei commenti mfunc appare nel tuo markup come commenti HTML. <!-- mfunc echo "ciao?"; --> Tienilo a mente a seconda di quanto sei felice che le persone vedano il tuo PHP (succede solo quando la cache è disattivata).
11 feb 2012 03:03:08