W3 total cache - actualizar caché programáticamente
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?

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"

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

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')); }

¿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 ¿Podrías averiguar con qué hook podemos usar este código?

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.

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"!

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í.

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.

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 -->

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

@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.

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 según los ejemplos debería ser algo como ?><!-- mclude -->functions2.php<!-- /mclude --><?php
(creo :)

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

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.

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

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).
