W3 cache totale - aggiornamento della cache a livello di codice [chiuso]


21

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 degli elettori) per post sono memorizzati nella cache anche se non dovrebbero esserlo (almeno non dopo che un utente ha votato per un articolo). Presumo che non sia possibile impedire che elementi specifici in una pagina vengano memorizzati nella cache (o è?), Quindi ho pensato di attivare l'aggiornamento della cache della pagina a livello di codice.

Eventuali suggerimenti?

Risposte:


21

se vuoi svuotare la cache puoi farlo: il plugin ha funzioni per questo

<?php 

flush_pgcache()  //page cache
flush_dbcache()  // database cache
flush_minify()  // minify cache
flush_all() //all caches

?>

e devi solo chiamarlo così:

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

e questa è sostanzialmente la risposta alla domanda nel titolo "aggiornamento della cache a livello di codice"


12
Puoi definire esplicitamente come hai istanziato l'oggetto $ w3_plugin_totalcache?
adamdport,

3
Parzialmente utile, come hai istanziato quella variabile?
thephpdev,

10

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

How do I implement fragment caching? 

Edit your templates to with the following syntax to ensure that dynamic features remain so:

Example 1:
<!-- mfunc any PHP code --><!-- /mfunc -->

Example 2:
<!-- mfunc -->any PHP code<!-- /mfunc -->

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

Example 4:
<!-- mclude path/to/file.php --><!-- /mclude -->

Example 5:
<!-- mclude -->path/to/file.php<!-- /mclude -->

Grazie Rast. Ma quando uso uno degli esempi sopra riportati, viene visualizzato un errore Errore di analisi: errore di sintassi, imprevisto '<'
user1567

@ user1567 probabilmente non hai corrispondenza con i <?php ?>tag di apertura / chiusura . Non li avevo ancora usati, quindi non ho un frammento pratico da mostrare.
Rarst

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

1
@ user1567 secondo gli esempi dovrebbe essere qualcosa del genere ?><!-- mclude -->functions2.php<!-- /mclude --><?php(penso :)
Rarst

Impossibile eseguire il caching dei frammenti di lavoro. Il mio problema descritto qui: stackoverflow.com/questions/31125413/...
JackTheKnife

10

Per svuotare una singola pagina per ID post in w3tc v0.9.3 ho trovato che ha funzionato:

if (function_exists('w3tc_pgcache_flush_post')){
 w3tc_pgcache_flush_post($post_id);
}

1
Dove inseriresti questo codice? Sembra che funzioni ad ogni caricamento della pagina (per quell'ID). Non c'è modo di impedire completamente la memorizzazione nella cache?
s_ha_dum,

@s_ha_dum Potresti scoprire con quale hook possiamo usare questo codice?
Prafulla Kumar Sahu,

Non sono necessari hook aggiuntivi se l'evento a cui si collega il codice / plug-in personalizzato viene eseguito dopo il caricamento dei plug-in, che in genere è il caso. Tutte le funzioni disponibili sono nella w3-total-cache-api.phpdirectory dei plugin del W3TC.
Walf

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 ha visitato una determinata pagina (una pagina delle impostazioni da visualizzare quando un agente è disponibile). Questo è molto utile per pagine specifiche, ma sarebbe bello se ci fosse una funzione che scaricava TUTTE le cache come fa Purge All Caches!
Jordan Carter,

9

La soluzione di Bainternet non sembra funzionare per me.

Sto usando con successo questo snippet alternativo all'interno di un plug-in, caricato nell'azione admin_init :

// Clear all 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>All <strong>W3 Total Cache</strong> caches successfully emptied.</p></div>');
}

Spero che questo aiuti qualcuno là fuori.


Posso confermare che la soluzione di kevinlearynet funziona con W3 Total Cache versione 0.9.2.4. Si è rotto per il mio plugin dopo quell'aggiornamento e questo funziona a meraviglia. Grazie! Paolo.

2
Sto provando a eseguirlo dalla riga di comando. Posso chiederti come hai caricato la classe W3_Plugin_TotalCacheAdmin? Ho provato a richiedere wp-load.php senza alcun risultato.
adamdport,

5

Nessuna delle precedenti ha funzionato per me nel mio plugin. Comunque ha funzionato! Confermato il funzionamento per la versione 0.9.2.4 di w3tc.

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

Ho fatto un "$ wpdb-> get_results (" SELECT sb_settings. f_fb_app_id, sb_settings. f_fb_secretFROM sb_settings");" e sono rimasto sorpreso dal fatto che i valori f_fb_secret e f_fb_app_id fossero gli stessi ogni volta. Era ovviamente il w3tc a memorizzare nella cache il risultato della query. Quindi ho aggiunto un flush di dbcache nella mia pagina di modifica per la tabella sb_settings.

Se si desidera cancellare la cache delle pagine, utilizzare invece w3tc_pgcache_flush.


Vorrei che il downvoter dicesse perché ha effettuato il downvoting. C'è qualcosa di sbagliato nella mia risposta?
Elrinth,

0

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

<!-- mfunc echo 'caching ON'; --><?php echo 'caching OFF'; ?><!-- /mfunc -->


(Penso) ecco come funziona:

  • I condizionali mfunc sostituiscono i tag php.
  • Se la memorizzazione nella cache è DISATTIVATA , i commenti php all'interno di mfunc vengono visualizzati nel markup come commenti HTML. <!-- mfunc echo "hello?"; -->Tienilo a mente a seconda di quanto sei felice che le persone vedano il tuo PHP (succede solo quando la cache è disattivata).
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.