W3 total de caché: actualización de caché mediante programación [cerrado]

21

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 ID de los votantes) por publicación, se almacenan en caché aunque no deberían (al menos no después de que un usuario vota por un artículo). Supongo que no es posible evitar que elementos específicos de una página se almacenen en caché (¿o sí?), Así que pensé en activar la actualización de caché de página mediante programación.

¿Alguna sugerencia?

usuario1567
fuente

Respuestas:

21

si desea vaciar el caché, puede hacerlo: el complemento tiene funciones para eso

<?php 

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

?>

y solo necesitas llamarlo así:

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

y esa es básicamente la respuesta a la pregunta en el título "actualización de caché mediante programación"

Bainternet
fuente
12
¿Puedes definir explícitamente cómo instanciaste el objeto $ w3_plugin_totalcache?
adamdport
3
Parcialmente útil, ¿cómo instanciaste esa variable?
thephpdev
10

W3 Total Cache admite el almacenamiento en caché de fragmentos. De preguntas frecuentes:

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
fuente
Gracias Rast. Pero cuando uso cualquiera de los ejemplos anteriores, recibo un error Error de análisis: error de sintaxis, inesperado '<'
user1567
@ user1567 probablemente no coincida con las <?php ?>etiquetas de apertura / cierre . Todavía no los había usado, así que no tengo un fragmento práctico para mostrar.
Rarst
Por un lado, me gustaría cargar functions.php sin almacenarlo en caché. El siguiente código en functions.php activó el error anterior: <? Php <! - mclude -> require_once (functions2.php) <! - / mclude ->?> ¿Qué tiene de malo el código?
user1567
1
@ user1567 según los ejemplos que debería ser algo así como ?><!-- mclude -->functions2.php<!-- /mclude --><?php(creo :)
Rarst
No se puede llegar al trabajo de almacenamiento en caché de fragmentos. Mi problema se describe aquí: stackoverflow.com/questions/31125413/…
JackTheKnife
10

Para vaciar una página por ID de publicación en w3tc v0.9.3, encontré que esto funcionó:

if (function_exists('w3tc_pgcache_flush_post')){
 w3tc_pgcache_flush_post($post_id);
}
usuario806052
fuente
1
¿Dónde colocarías este código? Parece que se ejecuta en cada carga de página (para esa ID). ¿No hay forma de evitar el almacenamiento en caché por completo?
s_ha_dum
@s_ha_dum ¿Podría averiguar con qué gancho podemos usar este código?
Prafulla Kumar Sahu
No se necesitan ganchos adicionales si el evento al que se adjunta su código / complemento personalizado se ejecuta después de que los complementos se hayan cargado, que suele ser el caso. Todas las funciones disponibles están en w3-total-cache-api.phpel directorio de complementos del W3TC.
Walf
Gracias, esto fue útil para mí ahora en diciembre de 2018. Necesitaba una forma de vaciar el caché de la página de inicio una vez que el cliente visitó una determinada 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 vacíe TODOS los cachés como lo hace Purgar todos los cachés!
Jordan Carter
9

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

Estoy usando con éxito este fragmento alternativo dentro de un complemento, cargado en la acción 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>');
}

Esperemos que esto ayude a alguien por ahí.

Kevin Leary
fuente
Puedo confirmar que la solución de kevinlearynet funciona con W3 Total Cache versión 0.9.2.4. Se rompió para mi complemento después de esa actualización, y esto funciona de maravilla. ¡Gracias! Paul.
2
Estoy tratando de ejecutar esto desde la línea de comandos. ¿Puedo preguntar cómo cargó la clase W3_Plugin_TotalCacheAdmin? Traté de requerir wp-load.php en vano.
adamdport
5

Nada de lo anterior funcionó para mí en mi complemento. Sin embargo esto funcionó! Se confirmó que funciona para la versión 0.9.2.4 de w3tc.

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

Hice un "$ wpdb-> get_results (" SELECT sb_settings. f_fb_app_id, sb_settings. f_fb_secretFROM sb_settings");" y me sorprendió que los valores f_fb_secret y f_fb_app_id fueran los mismos cada vez. Obviamente fue el w3tc almacenando en caché el resultado de la consulta. Así que agregué un vaciado dbcache en mi página de modificación para la tabla sb_settings.

Si desea borrar el caché de la página, simplemente use w3tc_pgcache_flush en su lugar.

Elrinth
fuente
Me gustaría que el votante negativo dijera por qué votó negativamente. ¿Hay algo mal en mi respuesta?
Elrinth
0

Use este fragmento para asegurarse de que su PHP se ejecute independientemente de si el almacenamiento en caché está activado o desactivado. Sí, tiene que escribir / llamar a su función dos veces.

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


(Creo) así es como funciona:

  • Los condicionales mfunc reemplazan las etiquetas php.
  • Si el almacenamiento en caché está desactivado , los comentarios php dentro de mfunc aparecen en su marcado como comentarios HTML. <!-- mfunc echo "hello?"; -->Tenga esto en cuenta dependiendo de qué tan contento esté de que la gente vea su PHP (solo sucede cuando el almacenamiento en caché está desactivado).
Dominic
fuente