cache total W3 - atualização de cache programaticamente [fechado]

19

Estou criando um site semelhante ao Digg no WordPress.

Depois de instalar o W3 Total Cache, notei que determinados elementos, como número de votos (e ids de eleitor) por post, são armazenados em cache mesmo que não devam ser (pelo menos não depois de um usuário votar em um artigo). Eu suponho que não é possível impedir que elementos específicos em uma página sejam armazenados em cache (ou são?), Então pensei em acionar a atualização do cache de página programaticamente.

Alguma sugestão?

    
por user1567 17.01.2011 / 14:20
fonte

6 respostas

20

se você quiser liberar o cache, poderá fazer isso: o plugin tem funções para isso

<?php 

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

?>

e você só precisa chamá-lo assim:

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

e isso é basicamente a resposta para a pergunta no título "atualização de cache programaticamente"

    
por Bainternet 17.01.2011 / 18:23
fonte
10

O W3 Total Cache suporta armazenamento em cache de fragmentos. De 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 -->
    
por Rarst 17.01.2011 / 15:06
fonte
10

Para liberar uma única página por post id no w3tc v0.9.3 eu achei isso funcionou:

if (function_exists('w3tc_pgcache_flush_post')){
 w3tc_pgcache_flush_post($post_id);
}
    
por user806052 20.03.2014 / 23:08
fonte
9

A solução da Bainternet não parece funcionar para mim.

Estou usando com sucesso este snippet alternativo em um plug-in carregado na ação 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>');
}

Espero que isso ajude alguém lá fora.

    
por Kevin Leary 19.09.2011 / 18:02
fonte
5

Nenhuma das opções acima funcionou para mim no meu plugin. No entanto, isso funcionou! Trabalho confirmado para a versão 0.9.2.4 do w3tc.

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

Eu fiz um " $ wpdb- > get_results ("SELECIONAR sb_settings . f_fb_app_id , sb_settings . f_fb_secret FROM sb_settings "); " e ficou surpreso que os valores f_fb_secret e f_fb_app_id eram os mesmos todas as vezes. Era obviamente o w3tc armazenando em cache o resultado da consulta. Então, adicionei um dbcache flush na minha página de modificação para a tabela sb_settings.

Se você quiser limpar o cache de páginas, use w3tc_pgcache_flush.

    
por Elrinth 10.04.2013 / 00:36
fonte
0

Use este trecho para garantir que o seu PHP seja executado, independentemente de o cache estar ativado ou desativado. Sim, você tem que escrever / chamar sua função duas vezes.

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

(eu acho) é assim que funciona:

  • Os condicionais mfunc substituem tags php.
  • Se o armazenamento em cache estiver OFF , os comentários do php dentro do mfunc aparecerão na sua marcação como um comentário HTML. <!-- mfunc echo "hello?"; --> Tenha isso em mente, dependendo de como você está feliz para as pessoas verem o seu PHP (só acontece quando o cache está desativado).
por Dominic 11.02.2012 / 02:03
fonte