Varish ESI的热门帖子

时间:2016-05-23 作者:WPDEVE

我正试图让Varnish ESI在我正在撰写的新博客上显示浏览量最大的帖子。这是我目前的剧本;

在主题文件中:

<esi:remove>
<?php get_template_part( \'partials/homepage/most-popular-loop\' ); ?>
</esi:remove>
<!--esi <esi:include src="/lib/plugins/esihandler.php"/> -->
拨打热门帖子:
function wpb_set_post_views($postID) {
    $count_key = \'wpb_post_views_count\';
    $count = get_post_meta($postID, $count_key, true);
    if($count==\'\'){
        $count = 0;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, \'0\');
    }else{
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}
//To keep the count accurate, lets get rid of prefetching
remove_action( \'wp_head\', \'adjacent_posts_rel_link_wp_head\', 10, 0);

function wpb_track_post_views ($post_id) {
    if ( !is_single() ) return;
    if ( empty ( $post_id) ) {
        global $post;
        $post_id = $post->ID;    
    }
    wpb_set_post_views($post_id);
}
add_action( \'wp_head\', \'wpb_track_post_views\');

function wpb_get_post_views($postID){
    $count_key = \'wpb_post_views_count\';
    $count = get_post_meta($postID, $count_key, true);
    if($count==\'\'){
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, \'0\');
        return "0 View";
    }
    return $count.\' Views\';
}
通过不缓存显示流行帖子的循环(通过在循环内外显示时间戳进行测试),我使ESI正常工作。然而,我不完全理解,如果实际的单篇文章页面用Varnish完全缓存,它是否会正常工作。我猜这是从数据库中提取后视图计数并将其显示在某个地方。但是如果单个帖子页面缓存在Varnish中,那么计数不会保持不变吗?

我想知道这里是否有人能帮我一点忙。如果我通过这个特定站点的Varnish,这样缓存就不会处于活动状态,那么它似乎可以正常工作。只是我不确定它是否能在网站上运行完整的vcl。

提前感谢,不确定这是否真的应该进入WP stack exchange或更多服务器端,因此请让我知道。

1 个回复
SO网友:Aric Watson

但是如果单个帖子页面缓存在Varnish中,那么计数不会保持不变吗?

是的,如果缓存了整个页面,那么PHP将永远不会运行来更新视图计数。您需要一个ESI块来调用将增加视图计数的未缓存URL。甚至Ajax脚本也可以。只需确保VCL不会缓存ESI块请求或Ajax请求:)

相关推荐

Vimeo froogaloop

我是个新手,但我想用this idea 在Wordpress站点上嵌入的Vimeo剪辑中禁用正向搜索我的职能。我添加了phpfunction frogaloop_scripts() { wp_register_script(\'snippet\', \'https://siteurl/wp-content/themes/themename/js/snippet.js\'); wp_register_script(\'frogaloop\',\'https://f.vimeo