首页 WordPress教程 WordPress支持CDN的文章阅读计数
正文 评论

WordPress支持CDN的文章阅读计数

思路:使用Ajax自动提交请求增加文章阅读数,Cookie记录是否已经提交,避免刷新重复提交。

JS代码(保存为views.js):

//获取Cookiefunction getCookie(name) {var str = document.cookie;var arr = str.split(\'; \');for(var i=0; i<arr.length; i++) {var c = arr[i].split(\'=\');if(c[0] == name) {return c[1];}}return false;}//Ajax请求function setPostmeta(varname, postid, target) {var cookie = getCookie(varname);if(cookie) return;jQuery.ajax({cache: false,url: ajax_object.ajax_url,type: \'POST\',data: {\'action\': \'add_views\',\'post_id\': postid,},dataType: \'JSON\',async: true,success:function(result) {if(result.status == \'success\') {if(target) target.text(result.views);var exdate = new Date();exdate.setDate(exdate.getDate() + 360);document.cookie = varname + \'=\' + result.views + \'; expires=\' + exdate.toGMTString() + \'; path=/\';}}});}

functions.php中添加如下代码:

//加载JS以及设置Ajax对象function bzg_load_scripts() {if(!is_single()) return;wp_enqueue_script(\'views\', get_theme_file_uri(\'/js/views.js\'), \'jquery\');wp_localize_script(\'views\', \'ajax_object\', array(\'ajax_url\' => admin_url(\'admin-ajax.php\')));}add_action(\'wp_enqueue_scripts\', \'bzg_load_scripts\');//获取文章阅读数function bzg_post_views($postid=\'\') {global $post;if(!$postid && isset($post->ID)) {$postid = $post->ID;}if(!$postid) return 0;$views = get_post_meta($postid, \'views\', true);echo $views ? $views : 0;}//Ajax添加阅读数function bzg_set_post_views() {if(!isset($_POST[\'post_id\'])) return;$post_id = (int) $_POST[\'post_id\'];if(get_post_status($post_id) === false) return;$views = get_post_meta($post_id, \'views\', true);if(!$views) $views = 0;$views = $views+1;update_post_meta($post_id, \'views\', $views);wp_send_json(array(\'status\' => \'success\',\'views\' => $views,));}add_action(\'wp_ajax_add_views\', \'bzg_set_post_views\');add_action(\'wp_ajax_nopriv_add_views\', \'bzg_set_post_views\');

single.php中调用JS函数:

<script type=\"text/javascript\">var target = jQuery(\".views\");var post_id = <?php echo $id; ?>;setPostmeta(\"views_\" + post_id, post_id, target);</script>

target是显示文章阅读数的标签,在需要显示文章阅读数的地方这样调用:

<span >阅读:<?php bzg_post_views(); ?></span>

缺点是最新的阅读数不能实时显示,毕竟CDN缓存了页面,不过计数是正常写入到数据库的。

-=||=-收藏赞 (0)
更多主题
单栏极简文艺WordPress博客主题:Diaspora主题
¥ 0 关注:20,837
详情
简约黑白WordPress个人博客主题:Personal主题
¥ 0 关注:20,642
详情
v1.0.0
小程序收录免费WordPress主题:XCX主题
¥ 0 关注:20,566
详情
v1.0.0
一款简约单栏的免费WordPress博客主题:itheme主题
¥ 0 关注:18,499
详情
功能丰富切轻量的WordPress虚拟资源主题:Rizhuti主题
¥ 599 关注:18,414
详情
大气优雅免费WordPress博客主题:HONEY主题
¥ 0 关注:15,293
详情
回复
暂无评论

不要再留垃圾评论了,主题君整理资源不容易,留几句鼓励的话吧。