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

21

Estou construindo um site como o Digg no WordPress.

Depois de instalar o W3 Total Cache, notei que certos elementos, como número de votos (e IDs de eleitores) por postagem, são armazenados em cache, mesmo que não devam ser (pelo menos não após o usuário votar em um artigo). Suponho que não é possível impedir que elementos específicos em uma página sejam armazenados em cache (ou é?), Então pensei em acionar a atualização do cache da página programaticamente.

Alguma sugestão?

user1567
fonte

Respostas:

21

se você deseja liberar o cache, pode fazer isso: o plug-in possui funções para esse

<?php 

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

?>

e você só precisa chamar assim:

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

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

Bainternet
fonte
12
Você pode definir explicitamente como você instancia o objeto $ w3_plugin_totalcache?
Adamdport
3
Parcialmente útil, como você instanciaram essa variável?
precisa saber é o seguinte
10

O W3 Total Cache suporta cache de fragmentos. Do 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
fonte
Obrigado Rast. Mas quando uso qualquer um dos exemplos acima, recebo um erro de erro de análise: erro de sintaxe, inesperado '<'
user1567
@ user1567 você provavelmente tem incompatibilidade com as <?php ?>tags de abertura / fechamento . Eu ainda não os havia usado, então não tenho trechos práticos para mostrar.
Rarst
Por um lado, gostaria de carregar o functions.php sem armazená-lo em cache. O código a seguir em functions.php acionou o erro acima: <? Php <! - mclude -> require_once (functions2.php) <! - / mclude ->?> O que há de errado com o código?
precisa saber é o seguinte
1
@ user1567 de acordo com os exemplos que deveria ser algo como ?><!-- mclude -->functions2.php<!-- /mclude --><?php(eu acho :)
Rarst
Não é possível trabalhar no cache de fragmentos. Meu problema descrito aqui: stackoverflow.com/questions/31125413/…
JackTheKnife
10

Para liberar uma única página pelo ID da postagem no w3tc v0.9.3, achei que isso funcionava:

if (function_exists('w3tc_pgcache_flush_post')){
 w3tc_pgcache_flush_post($post_id);
}
user806052
fonte
1
Onde você colocaria esse código? Parece que ele é executado em todo carregamento de página (para esse ID). Não há como impedir o armazenamento em cache completo?
s_ha_dum
@s_ha_dum Você pode descobrir com qual gancho podemos usar esse código?
Prafulla Kumar Sahu
Ganchos extras não são necessários se o evento que seu código / plug-in customizado se anexar for executado após o carregamento dos plug-ins, o que geralmente é o caso. Todas as funções disponíveis estão no w3-total-cache-api.phpdiretório de plugins do W3TC.
Walf
Obrigado, isso foi útil para mim agora em dezembro de 2018. Eu precisava de uma maneira de liberar o cache da página inicial depois que o cliente visitava uma determinada página (uma página de configurações para exibir quando um agente está disponível). Isso é muito útil para páginas específicas, mas seria bom se houvesse uma função que liberasse TODOS os caches como o Purge All Caches!
Jordan Carter
9

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

Estou usando com sucesso esse 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.

Kevin Leary
fonte
Posso confirmar que a solução da kevinlearynet funciona com o W3 Total Cache versão 0.9.2.4. Ele quebrou no meu plug-in após essa atualização, e isso funciona como um deleite. Obrigado! Paulo.
2
Estou tentando executar isso na linha de comando. Posso perguntar como você carregou a classe W3_Plugin_TotalCacheAdmin? Eu tentei exigir wp-load.php sem sucesso.
Adamdport
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 (" SELECT sb_settings. f_fb_app_id, sb_settings. f_fb_secretFROM sb_settings");" e fiquei surpreso com os valores f_fb_secret e f_fb_app_id sempre os mesmos. Obviamente, foi o w3tc que armazenou em cache o resultado da consulta. Então, eu adicionei um dbcache flush na minha página de modificação para a tabela sb_settings.

Se você deseja limpar o cache da página, use w3tc_pgcache_flush.

Elrinth
fonte
Eu gostaria que o voto negativo dissesse por que ele votou negativamente. Há algo errado na minha resposta?
Elrinth # 12/13
0

Use esse trecho para garantir que seu PHP seja executado, independentemente de o cache estar ativado ou desativado. Sim, você deve 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 as tags php.
  • Se o cache estiver desativado , o php dentro dos comentários do mfunc aparecerá na sua marcação como um comentário em HTML. <!-- mfunc echo "hello?"; -->Lembre-se disso, dependendo de como você está feliz por as pessoas verem seu PHP (só acontece quando o cache está desativado).
Dominic
fonte