章
目
录
当我们wordpress网站在使用缓存后,用户点击文章页面,发现文章的浏览量不会增加,同样点赞也是类似,我们该如何解决呢?
为了提升用户体验,我们可以采用了AJAX技术来动态获取并刷新文章阅读数量。用户在阅读文章时,后台的AJAX会自动向服务器发送请求,而服务器在接收到请求后,会将原有的阅读数量加1,并实时更新到数据库中。
php接口代码
在这个过程中,最关键的环节就是AJAX提交的请求。为了能够处理这些请求,我们需要一个接口。这个接口就是PHP编写的views.php文件,它被保存在主题目录下的action文件夹中(如果该文件夹不存在,我们需要新建一个)。以下是views.php的核心代码:
<?php
require( dirname(__FILE__).'/../../../../wp-load.php' );
nocache_headers();
$post_ID = isset($_POST['post_ID']) ? (int) $_POST['post_ID'] : 0;
if ($post_ID!=0 ) {
$post_views = (int) get_post_meta($post_ID, 'views', true);
if (!update_post_meta($post_ID, 'views', ($post_views + 1))) {
add_post_meta($post_ID, 'views', 1, true);
}
$post_views = (int) get_post_meta($post_ID, 'views', true);
print_r(json_encode(array('error' => 0, 'views' => 1, 'response' => $post_views)));
exit;
}else{
print_r(json_encode(array('error' => 1, 'views' => 0, 'response' => $post_views)));
exit;
}
?>
这段代码主要涉及WordPress的后台操作和AJAX请求。首先,它引入了WordPress的核心函数支持文件,这是使用WordPress提供的函数所必需的。然后,它设置了响应头部的缓存,以确保浏览器不会缓存页面内容。接下来,它检查POST参数post_id是否存在,如果不存在则将其设置为0。
在代码的逻辑部分,它执行了一些操作,包括存储自定义字段的内容。需要注意的是,add_post_meta函数用于存储自定义字段,具体字段名称需要根据实际情况进行修改。这里使用的是webstack主题的文章阅读数量字段。
ajax请求代码
最后,它使用jQuery来发送AJAX请求获取数据。为了使这段代码能够正常工作,需要确保jQuery库已经在页面中加载,并且这段JavaScript代码需要在HTML内容加载完成之后再执行。
//获取并增加阅读数
function getpostviews(postid){
$.ajax({
type: "POST",
url: 'https://www.xxx.com/wp-content/themes/webstack/action/views.php',
dataType: "json",
data: {"post_ID": postid},
success: function(data, textStatus, xhr) {
if (data.error){ return false;}else{
$(".postviews").text("阅读("+data.response+")");
}
}
});
}
请注意,这里只是提供了一个大致的思路和伪代码示例,实际使用时需要根据具体情况进行适当的修改和调整。同时,由于涉及到的代码和操作比较复杂,建议在使用之前进行充分的学习和研究,以确保代码的正确性和安全性。上面的postviews是我的文章阅读数量HTML标签的class名称,根据自己的主题修改,然后在主题的文章页模板single.php中写输出js代码:
<?php
<script type="text/javascript">
$(document).ready(function (){
echo 'getpostviews('.get_the_ID().');';
});
</script> ?>
在确保文章页加载JavaScript的同时,我们也可以考虑在页脚处输出代码。不过,为了避免在非文章页加载这个函数,我们可以使用WordPress的is_single
函数进行判断。这样可以确保只在文章页面执行相关操作。另外,这种方法对于被腾讯CDN或其它CDN缓存的页面,以及被WordPress插件wp_super_cache缓存的页面都适用。当然,请注意,如果浏览器禁止执行JavaScript,或者用户在极短时间内关闭网页,那么阅读数量的更新可能会出现问题。因此,在实际应用中,我们需要权衡各种因素,确保最佳的用户体验。