web-dev-qa-db-ja.com

W3トータルキャッシュ - プログラムによるキャッシュリフレッシュ

私はWordPressでDiggのようなWebサイトを構築しています。

W3 Total Cacheをインストールした後、投稿あたりの投票数(および投票者ID)などの要素が(少なくともユーザーが記事に投票した後ではなくても)キャッシュされることに気付きました。ページ内の特定の要素がキャッシュされるのを防ぐことは不可能であると思います(またはそうですか?)ので、ページキャッシュの更新をプログラム的にトリガーすることを考えました。

助言がありますか?

21
user1567

あなたがキャッシュをフラッシュしたいならば、あなたはそれをすることができます:プラグインはそのための機能を持っています

<?php 

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

?>

そして、あなたはこのようにそれを呼ぶ必要があります:

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

そしてそれは基本的に「プログラムによるキャッシュリフレッシュ」というタイトルの質問に対する答えです。

20
Bainternet

W3tc v0.9.3でpost idで単一のページをフラッシュするために、私はこれがうまくいったのを見つけました:

if (function_exists('w3tc_pgcache_flush_post')){
 w3tc_pgcache_flush_post($post_id);
}
10
user806052

W3 Total Cacheはフラグメントキャッシュをサポートしています。 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 -->
10
Rarst

Bainternetの解決策は私にはうまくいかないようでした。

admin_init actionにロードされたプラグイン内でこの代替スニペットを使用することに成功しました。

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

うまくいけば、これは外に誰かに役立ちます。

9
Kevin Leary

プラグインでは上記のいずれも機能しませんでした。しかし、これはうまくいきました! w3tcのバージョン0.9.2.4で動作することを確認しました。

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

"$ wpdb-> get_results(" SELECT sb_settings.f_fb_app_idsb_settings.f_fb_secret FROM sb_settings ");"を実行し、値に驚いたf_fb_secretとf_fb_app_idは毎回同じでした。明らかに、クエリの結果をキャッシュするw3tcでした。そこで、sb_settingsテーブルの変更ページにdbcacheフラッシュを追加しました。

ページキャッシュをクリアする場合は、代わりにw3tc_pgcache_flushを使用します。

5
Elrinth

このスニペットを使用して、キャッシュがオンかオフかに関係なく、PHPが実行されることを確認します。はい、あなたは2回あなたの関数を書く/呼ぶ必要があります。

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


(私は思う)これはそれがどのように機能するかです:

  • Mfunc conditionals replace phpタグ。
  • キャッシュが _ off _ の場合、mfuncコメント内のphpはHTMLコメントとしてマークアップに表示されます。 <!-- mfunc echo "hello?"; --> PHPを他の人に見てもうれしいことに応じて、これを念頭に置いてください(キャッシュがオフの場合にのみ発生します)。
0
Dominic