W3 total cache - odświeżanie pamięci podręcznej programowo [zamknięte]

21

Tworzę stronę podobną do Digg w WordPress.

Po zainstalowaniu W3 Total Cache zauważyłem, że pewne elementy, takie jak liczba głosów (i identyfikatory wyborców) na post są buforowane, chociaż nie powinny (przynajmniej nie po tym, jak użytkownik głosuje na artykuł). Zakładam, że nie można zapobiec buforowaniu określonych elementów strony (czy to jest?), Więc pomyślałem o programowym uruchomieniu odświeżania pamięci podręcznej strony.

Jakieś sugestie?

użytkownik1567
źródło

Odpowiedzi:

21

jeśli chcesz opróżnić pamięć podręczną, możesz to zrobić: wtyczka ma do tego odpowiednie funkcje

<?php 

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

?>

i musisz to tak nazwać:

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

i jest to w zasadzie odpowiedź na pytanie w tytule „programowe odświeżanie pamięci podręcznej”

Bainternet
źródło
12
Czy możesz wyraźnie zdefiniować sposób tworzenia instancji obiektu $ w3_plugin_totalcache?
adamdport
3
Częściowo pomocne, jak utworzyłeś instancję tej zmiennej?
thephpdev
10

W3 Total Cache obsługuje buforowanie fragmentów. Z 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 -->
Rarst
źródło
Dzięki Rast. Ale gdy korzystam z jednego z powyższych przykładów, pojawia się błąd Błąd analizy: błąd składni, nieoczekiwany „<”
1567
@ user1567 prawdopodobnie masz niedopasowanie z <?php ?>tagami otwierającymi / zamykającymi . Jeszcze ich nie użyłem, więc nie mam praktycznego fragmentu do pokazania.
Rarst 17.01.11
Po pierwsze, chciałbym załadować functions.php bez buforowania. Poniższy kod w functions.php wywołał powyższy błąd: <? Php <! - mclude -> requ_once (functions2.php) <! - / mclude ->?> Co jest nie tak z kodem?
user1567
1
@ user1567 zgodnie z przykładami powinno to być coś takiego ?><!-- mclude -->functions2.php<!-- /mclude --><?php(myślę :)
Rarst
Nie można uruchomić buforowania fragmentów. Mój problem opisany tutaj: stackoverflow.com/questions/31125413/…
JackTheKnife
10

Aby opróżnić pojedynczą stronę za pomocą identyfikatora postu w w3tc v0.9.3, stwierdziłem, że to zadziałało:

if (function_exists('w3tc_pgcache_flush_post')){
 w3tc_pgcache_flush_post($post_id);
}
użytkownik806052
źródło
1
Gdzie umieścisz ten kod? Wygląda na to, że działa przy każdym ładowaniu strony (dla tego identyfikatora). Czy nie ma sposobu, aby całkowicie zapobiec buforowaniu?
s_ha_dum
@ s_ha_dum Czy możesz dowiedzieć się, z jakim hakiem możemy użyć tego kodu?
Prafulla Kumar Sahu
Dodatkowe przechwytywania nie są potrzebne, jeśli zdarzenie, które niestandardowy kod / wtyczka dołącza do wykonania po załadowaniu wtyczek, co zwykle ma miejsce. Wszystkie dostępne funkcje znajdują się w w3-total-cache-api.phpkatalogu wtyczek W3TC.
Walf
Dziękuję, pomogło mi to teraz w grudniu 2018 r. Potrzebowałem sposobu na wyczyszczenie pamięci podręcznej strony głównej, gdy klient odwiedził określoną stronę (stronę ustawień wyświetlaną, gdy agent jest dostępny). Jest to bardzo przydatne w przypadku określonych stron, ale byłoby miło, gdyby istniała funkcja, która opróżnia WSZYSTKIE pamięci podręczne, podobnie jak Czyść wszystkie pamięci podręczne!
Jordan Carter
9

Rozwiązanie Bainternet nie działało dla mnie.

Z powodzeniem używam tego alternatywnego fragmentu kodu we wtyczce, ładowanej podczas działania 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>');
}

Mam nadzieję, że to pomaga komuś tam.

Kevin Leary
źródło
Mogę potwierdzić, że rozwiązanie kevinlearynet działa z W3 Total Cache w wersji 0.9.2.4. Zepsuł się mój plugin po tej aktualizacji, a to działa na ucztę. Dziękuję Ci! Paweł.
2
Próbuję uruchomić to z wiersza polecenia. Czy mogę zapytać, jak załadowałeś klasę W3_Plugin_TotalCacheAdmin? Próbowałem wymagać wp-load.php bezskutecznie.
adamdport
5

Żadne z powyższych nie działało dla mnie w mojej wtyczce. Jednak to zadziałało! Potwierdzono pracę dla wersji 0.9.2.4 w3tc.

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

Zrobiłem „$ wpdb-> get_results („ SELECT sb_settings. f_fb_app_id, sb_settings. f_fb_secretFROM sb_settings”);” i byłem zaskoczony, że wartości f_fb_secret i f_fb_app_id były za każdym razem takie same. Najwyraźniej w3tc buforował wynik zapytania. Więc dodałem opróżnianie dbcache na mojej stronie modyfikacji dla tabeli sb_settings.

Jeśli chcesz wyczyścić pamięć podręczną strony, po prostu użyj zamiast tego w3tc_pgcache_flush.

Elrinth
źródło
Chciałbym, aby downvoter powiedział, dlaczego on przegłosował. Czy w mojej odpowiedzi jest coś nie tak?
Elrinth
0

Użyj tego fragmentu, aby upewnić się, że Twój PHP działa niezależnie od tego, czy buforowanie jest włączone czy wyłączone. Tak, musisz napisać / wywołać swoją funkcję dwukrotnie.

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


(Myślę) tak to działa:

  • Warunki warunkowe mfunc zastępują tagi php.
  • Jeśli buforowanie jest WYŁĄCZONE , php wewnątrz komentarzy mfunc pojawia się w twoim znaczniku jako komentarz HTML. <!-- mfunc echo "hello?"; -->Miej to na uwadze w zależności od tego, jak bardzo jesteś szczęśliwy, że ludzie widzą twoje PHP (dzieje się to tylko wtedy, gdy buforowanie jest wyłączone).
Dominik
źródło