W3 total cache - actualizar caché programáticamente

17 ene 2011, 15:20:04
Vistas: 40K
Votos: 26

Estoy construyendo un sitio web similar a Digg en WordPress.

Después de instalar W3 Total Cache, noté que ciertos elementos como el número de votos (y los IDs de los votantes) por publicación se almacenan en caché aunque no deberían hacerlo (al menos no después de que un usuario vote por un artículo). Supongo que no es posible evitar que elementos específicos en una página se almacenen en caché (¿o sí lo es?), así que pensé en activar la actualización de la caché de página programáticamente.

¿Alguna sugerencia?

0
Todas las respuestas a la pregunta 6
3
21

si deseas limpiar la caché puedes hacerlo: el plugin tiene funciones para eso

<?php 

flush_pgcache()  //caché de páginas
flush_dbcache()  // caché de base de datos  
flush_minify()  // caché de minificación
flush_all() //todas las cachés

?>

y solo necesitas llamarla así:

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

y esa es básicamente la respuesta a la pregunta del título "actualizar caché programáticamente"

17 ene 2011 19:23:06
Comentarios

¿Podrías definir explícitamente cómo instanciaste el objeto $w3_plugin_totalcache?

adamdport adamdport
27 feb 2014 17:35:50

Parcialmente útil, ¿cómo instanciaste esa variable?

thephpdev thephpdev
23 ene 2017 14:29:53

declara una nueva instancia de la clase y luego referencia ese método. 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 oct 2022 22:06:06
4
12

Para limpiar (flush) una sola página por ID de publicación en w3tc v0.9.3, encontré que esto funcionaba:

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

¿Dónde colocarías este código? Parece que se ejecuta en cada carga de página (para ese ID). ¿No hay manera de evitar el almacenamiento en caché por completo?

s_ha_dum s_ha_dum
21 mar 2014 00:31:44

@s_ha_dum ¿Podrías averiguar con qué hook podemos usar este código?

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

No se necesitan hooks adicionales si el evento al que se adjunta tu código/plugin personalizado se ejecuta después de que los plugins hayan cargado, lo cual es típicamente el caso. Todas las funciones disponibles están en w3-total-cache-api.php en el directorio del plugin W3TC.

Walf Walf
1 ago 2018 05:29:19

Gracias, esto fue útil para mí ahora en diciembre de 2018. Necesitaba una forma de limpiar la caché de la página de inicio una vez que el cliente visitaba cierta página (una página de configuración para mostrar cuando un agente está disponible). Esto es muy útil para páginas específicas, ¡pero sería bueno si hubiera una función que limpiara TODAS las cachés como lo hace "Purge All Caches"!

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

La solución de Bainternet no pareció funcionar para mí.

Estoy usando con éxito este fragmento alternativo dentro de un plugin, cargado en la acción admin_init:

// Limpiar todo el caché de 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>Todos los cachés de <strong>W3 Total Cache</strong> se vaciaron correctamente.</p></div>');
}

Espero que esto ayude a alguien por ahí.

19 sept 2011 19:02:40
Comentarios

Puedo confirmar que la solución de kevinlearynet funciona con la versión 0.9.2.4 de W3 Total Cache. Dejó de funcionar para mi plugin después de esa actualización, y esto funciona perfectamente. ¡Gracias! Paul.

User User
4 oct 2011 21:55:31

Estoy intentando ejecutar esto desde la línea de comandos. ¿Puedo preguntar cómo cargaste la clase W3_Plugin_TotalCacheAdmin? Intenté requerir wp-load.php sin éxito.

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

W3 Total Cache admite el almacenamiento en caché de fragmentos. Según las preguntas frecuentes:

¿Cómo implemento el almacenamiento en caché de fragmentos?

Edita tus plantillas con la siguiente sintaxis para asegurarte de que las características dinámicas permanezcan así:

Ejemplo 1:
<!-- mfunc cualquier código PHP --><!-- /mfunc -->

Ejemplo 2:
<!-- mfunc -->cualquier código PHP<!-- /mfunc -->

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

Ejemplo 4:
<!-- mclude ruta/al/archivo.php --><!-- /mclude -->

Ejemplo 5:
<!-- mclude -->ruta/al/archivo.php<!-- /mclude -->
17 ene 2011 16:06:28
Comentarios

Gracias Rast. Pero cuando uso cualquiera de los ejemplos anteriores, obtengo un error Parse error: syntax error, unexpected '<'

user1567 user1567
17 ene 2011 16:34:55

@user1567 probablemente tienes un desajuste con las etiquetas de apertura/cierre <?php ?>. Yo no las he usado todavía así que no tengo un fragmento práctico para mostrar.

Rarst Rarst
17 ene 2011 16:57:59

Por un lado, me gustaría cargar functions.php sin almacenarlo en caché. El siguiente código en functions.php desencadenó el error anterior: <?php <!-- mclude -->require_once(functions2.php)<!-- /mclude --> ?> ¿Qué está mal en el código?

user1567 user1567
17 ene 2011 17:20:31

@user1567 según los ejemplos debería ser algo como ?><!-- mclude -->functions2.php<!-- /mclude --><?php (creo :)

Rarst Rarst
17 ene 2011 17:36:08

No logro hacer funcionar el caché de fragmentos. Mi problema descrito aquí: http://stackoverflow.com/questions/31125413/w3-total-cache-and-fragment-cache-not-able-get-it-to-work

JackTheKnife JackTheKnife
30 jun 2015 19:38:48
2

Nada de lo anterior funcionó para mí en mi plugin. Sin embargo, ¡esto sí funcionó! Confirmado que funciona para la versión 0.9.2.4 de w3tc.

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

Hice una consulta:

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

y me sorprendió que los valores f_fb_secret y f_fb_app_id eran los mismos cada vez. Obviamente era w3tc almacenando en caché el resultado de la consulta. Así que añadí un flush de dbcache en mi página de modificación para la tabla sb_settings.

Si quisieras limpiar la caché de página, simplemente usa w3tc_pgcache_flush en su lugar.

10 abr 2013 01:36:08
Comentarios

Me gustaría que quien dio el voto negativo diga por qué lo hizo. ¿Hay algo incorrecto en mi respuesta?

Elrinth Elrinth
12 abr 2013 11:19:36

Esto funcionó para mí: if (function_exists('w3tc_flush_all')) { w3tc_flush_all(); }

Puedes encontrar otras funciones en w3-total-cache-api.php

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

Utiliza este fragmento de código para asegurarte de que tu PHP se ejecute independientemente de si el caché está activado o desactivado. Sí, tienes que escribir/llamar tu función dos veces.

<!-- mfunc echo 'caché ACTIVADO'; --><?php echo 'caché DESACTIVADO'; ?><!-- /mfunc -->


(Creo que) así es como funciona:

  • Los condicionales mfunc reemplazan las etiquetas php.
  • Si el caché está DESACTIVADO, el php dentro de los comentarios mfunc aparece en tu marcado como comentarios HTML. <!-- mfunc echo "¿hola?"; --> Ten esto en cuenta dependiendo de lo cómodo que estés con que la gente vea tu PHP (solo ocurre cuando el caché está desactivado).
11 feb 2012 03:03:08