Caching the_content calls

时间:2017-05-05 作者:Szépe Viktor

我正在编写一个名为Tiny cache的非常小的缓存插件。它只能缓存the_content() 我认为,在页面加载过程中,生成调用所需的时间最长。

我能够钩住\\u内容并将其存储在对象缓存中。

这个插件如何服务于缓存的内容?如何停止处理\\u内容筛选器?

remove_all_filters() 会进一步摧毁一切the_content() 呼叫。也许可以把过滤器藏起来,以后再恢复?

非常感谢。

1 个回复
SO网友:Szépe Viktor

第一个实现是在一个名为the_content_cached.

function the_content_cached( $more_link_text = null, $strip_teaser = false ) {

    $post_id = get_the_ID();
    // Not possible to tie content to post ID
    if ( ! $post_id ) {
        the_content( $more_link_text, $strip_teaser );
        return;
    }

    $cached = wp_cache_get( $post_id, \'the_content\' );
    // Cache miss
    if ( ! $cached ) {
        add_filter( \'the_content\', \'tiny_cache_save_the_content\', PHP_INT_MAX );
        the_content( $more_link_text, $strip_teaser );
        remove_filter( \'the_content\', \'tiny_cache_save_the_content\', PHP_INT_MAX );
        return;
    }

    // Cache hit
    $timestamp = gmdate( \'c\' );
    $message_tpl = \'<!-- Cached content generated by Tiny cache on %s -->\';
    print $cached;
    printf( $message_tpl, $timestamp );
}

// Save the content to the object cache
function tiny_cache_save_the_content( $content ) {

    $post_id = get_the_ID();
    // Tie content to post ID
    if ( $post_id ) {
        wp_cache_set( $post_id, $content, \'the_content\' );
    }

    return $content;
}

结束

相关推荐

Nonces and Cache

很明显,表单提交和AJAX请求,尤其是合理的请求,需要“nonces”来避免某些攻击。然而,随着高速缓存系统的大量使用,很难生成它们并输出新的nonce而不是高速缓存的nonce。为了解决这个问题,我考虑创建一个AJAX函数,返回一个新的nonce,在提交表单之前进行请求。然后,此nonce将作为隐藏字段附加到表单中。你认为这是一种安全的方法吗?返回新nonce的PHP函数:function create_nonce() { return wp_create_nonce(\'my-nonc