W3合計キャッシュ-プログラムによるキャッシュ更新[終了]


21

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

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

助言がありますか?

回答:


21

キャッシュをフラッシュしたい場合は、それを行うことができます:プラグインにはそのための機能があります

<?php 

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

?>

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

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

それは基本的に「プログラムでキャッシュを更新する」というタイトルの質問に対する答えです


12
$ w3_plugin_totalcacheオブジェクトをインスタンス化する方法を明示的に定義してください。
アダムポート14

3
部分的に役立ちますが、どのようにしてその変数をインスタンス化しましたか?
thephpdev

10

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

ラストに感謝します。しかし、上記の例を使用すると、エラーが表示されます解析エラー:構文エラー、予期しない '<'
user1567

@ user1567おそらく、開始<?php ?>タグと終了タグが一致していません。私はまだこれらを使用していなかったので、表示する実用的なスニペットはありません。
11

一つには、functions.phpをキャッシュせずにロードしたいです。functions.phpの次のコードが上記のエラーをトリガーしました:<?php <!-mclude-> require_once(functions2.php)<!-/ mclude->?>コードの何が問題になっていますか?
user1567

1
@ user1567の例によると、次のよう?><!-- mclude -->functions2.php<!-- /mclude --><?phpになります(私は思う:)
Rarst

フラグメントキャッシュを機能させることができません。ここで説明する私の問題:stackoverflow.com/questions/31125413/…–
JackTheKnife

10

w3tc v0.9.3の投稿IDで1つのページをフラッシュするには、これが機能することがわかりました。

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

1
このコードはどこに配置しますか?これは、(そのIDの)すべてのページ読み込みで実行されるように見えます。キャッシュを完全に防ぐ方法はありませんか?
s_ha_dum 14年

@s_ha_dumこのコードを使用できるフックを確認してください。
プラフーラクマールサフ

カスタムコード/プラグインがアタッチするイベントがプラグインのロード後に実行される場合、追加のフックは必要ありません。これは通常の場合です。使用可能なすべての機能はw3-total-cache-api.php、W3TCのプラグインディレクトリにあります。
ウォルフ

ありがとう これは特定のページに非常に役立ちますが、Purge All Cachesのように、すべてのキャッシュをフラッシュする関数があれば便利です!
ジョーダンカーター

9

Bainternetのソリューションは、私には役に立たなかったようです。

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

うまくいけば、これはそこに誰かを助ける。


kevinlearynetのソリューションがW3 Total Cacheバージョン0.9.2.4で動作することを確認できます。アップグレード後にプラグインが破損しましたがこれはうまくいきます。ありがとうございました!ポール。

2
これをコマンドラインから実行しようとしています。W3_Plugin_TotalCacheAdminクラスをどのようにロードしたか尋ねることはできますか?私はwp-load.phpを利用できないように要求しようとしました。
アダムポート14

5

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

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

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

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


ダウンボッターにダウンボットした理由を言ってほしい。私の答えに何か問題はありますか?
エリンス

0

このスニペットを使用して、キャッシュがオンかオフかに関係なく、PHPが実行されるようにします。はい、関数を2回作成/呼び出す必要があります。

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


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

  • mfunc条件 phpタグを置き換えます。
  • キャッシングがOFFの場合、mfuncコメント内のphp はマークアップにHTMLコメントとして表示されます。<!-- mfunc echo "hello?"; -->人々があなたのPHPを見ることがどれだけ幸せであるかに応じて、これを覚えておいてください(キャッシュがオフのときのみ起こります)。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.