我正试图让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或更多服务器端,因此请让我知道。