而不是合并dynamic content into cached pages, 最好使用AJAX将动态内容拉到浏览器中的这些页面上。
在您的news.php
文件,只需有一个将包含内容的空元素。更好的是,让它包含AJAX spinner 这表明内容即将到来。
<div id="late-load-news">
<img src="<?php echo get_stylesheet_directory_uri(); ?>/images/ajax-loader.gif" />
</div>
然后使用jQuery加载新闻内容——这段代码包含在主题的函数中。php:
/**
* AJAX handler to output an HTML fragment for news
*/
function wpse_70813_news() {
// stop browser from caching output
header(\'Pragma: public\');
header(\'Expires: 0\');
header(\'Cache-Control: must-revalidate\');
//...output your news content here...
exit;
}
add_action(\'wp_ajax_late-load-news\', \'wpse_70813_news\');
add_action(\'wp_ajax_nopriv_late-load-news\', \'wpse_70813_news\');
/**
* enqueue jQuery
*/
add_action(\'wp_enqueue_script\', function() {
wp_enqueue_script(\'jquery\');
});
/**
* add footer script to load news
*/
add_action(\'wp_print_footer_script\', function() {
?>
<script>
jQuery.ajax({
type : "GET",
url : "<?php echo admin_url(\'admin-ajax.php\'); ?>",
dataType : "html",
data : { action: "late-load-news" },
success : function(content) {
jQuery("#late-load-news").html(content);
}
});
</script>
<?php
});
这将在访问者每次导航到新页面时加载内容。如果你的新闻内容变化不大,我建议你利用
sessionStorage 在访问期间在浏览器中缓存新闻内容。如果要限制缓存的持续时间,请参阅
Session storage with expiry time.