web-dev-qa-db-ja.com

プログラム的にスーパーキャッシュを空にする(ACFアクションあり)

私は私のクライアントのために素晴らしいバックエンドインターフェースを作成するためにAdvanced Custom Fieldsを定期的に使用しています(私たちの多くがやっているように…)。 ACFには、どこからでもデータを取得できる1つまたは複数のグローバルオプションページを作成するOptionsアドオンが含まれています。たとえば、[Options]ページを使用して、ホームページカルーセルに掲載する5つの投稿をクライアントに選択させます。

OptionsアドオンとSuper Cacheを使って問題にぶつかり始めました。デフォルトでは[オプション]ページを保存してもキャッシュには影響がないため、たとえばホームページのカルーセルは変更されずにクライアントは混乱します…

通常、クライアントに管理アクセス権を与えたり、キャッシュなどの技術的な問題を抱えたりすることはないので、オプションページを保存するときにプログラムでキャッシュを空にするには、オプションページにフックする必要があります。

ACFの作成者は次のように述べています。すべての投稿されたフィールドデータを保存するために使用されるacf/save_postと呼ばれるアクションがあります。おそらく、このアクションを使ってキャッシュにフックしてフラッシュすることができます。 $ post_idパラメータを使用して、それがオプションページかどうかを判断できます。オプションページはpost_idとして '0'を通過すると思います。それか 'options'のどちらかです。

[オプション]ページが保存されるたびにスーパーキャッシュのキャッシュを完全に消去するアクションを作成するのを手助けできる人はいますか。これは間違いなく多くの人々を助けるでしょう!

acf/save_post情報はこちら:http://www.advancedcustomfields.com/resources/actions/acfsave_post/

どうもありがとうございました。

2
Jacob

この関数はACFオプションページの保存時にWP Super Cacheをクリアします。楽しい!

<?php

/* Additional Function to Prune the Cache if $post_id is '0' or 'options' */
function f711_clear_custom_cache($post_id) {

    // just execute if the $post_id has either of these Values. Skip on Autosave
    if ( ( $post_id == 0 || $post_id == 'options' ) && !defined( 'DOING_AUTOSAVE' ) ) {

        // Some Super Cache Stuff
        global $blog_cache_dir;

        // Execute the Super Cache clearing, taken from original wp_cache_post_edit.php
        if ( $wp_cache_object_cache ) {
            reset_oc_version();
        } else {
            // Clear the cache. Problem: Due to the combination of different Posts used for the Slider, we have to clear the global Cache. Could result in Performance Issues due to high Server Load while deleting and creating the cache again.
            Prune_super_cache( $blog_cache_dir, true );
            Prune_super_cache( get_supercache_dir(), true );
        }
    }

    return $post_id;

}

// Add the new Function to the 'acf/save_post' Hook. I Use Priority 1 in this case, to be sure to execute the Function
add_action('acf/save_post', 'f711_clear_custom_cache', 1);

?>
1
Jacob