阅读(浏览、点击、查看)文章或话题计数,还是挺不错的,为什么WordPress默认不集成此功能呢。博客文章的阅读量计数我并没有安装插件来实现此功能,仅在主题functions.php增加两个网上流行的阅读量计数函数,非常不错!在用了几年之后,想在BuddyPress里的bbPress版块话题上也增加阅读量计数,可是在BuddyPress群组的bbPress版块里的话题要实现此阅读量计数,我遇到了一些麻烦!下面慢慢记录以下这些奇奇怪怪兜兜转转的问题吧…
博客文章添加阅读量计数功能
简单、稳定、实用的阅读量计数函数:(添加到主题 functions.php
)
function setPostViews($postID) {
$count_key = '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);
}
}
function getPostViews($postID){
$count_key = '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 ";
}
return $count;
}
然后在我们需要设置阅读量计数的模板添加以下代码:(统计博客文章的阅读计数,添加到 single.php
)
/* Start the Loop */
while ( have_posts() ) :
the_post();
// 设置阅读量计数
setPostViews(get_the_ID());
get_template_part( 'template-parts/post/content', get_post_format() );
最后在我们需要显示阅读量计数的模板添加以下代码:
我需要在 content-excerpt.php
与 content.php
显示阅读量计数
if ( 'post' === get_post_type() ) {
echo '<div class="entry-meta">';
if ( is_single() ) {
twentyseventeen_posted_on();
} else {
echo twentyseventeen_time_link();
twentyseventeen_edit_link();
};
//显示阅读量次数
echo '<span class="postviews-icon">'; echo getPostViews(get_the_ID()); echo '</span>';
echo '</div><!-- .entry-meta -->';
博客文章的阅读量计数就这么简单、稳定、实用。至于设置cookie刷新不累加等功能,反正我测试了百度找的一些常规代码,都以失败告终,放弃为阅读量计数设置cookie这个我认为不现实的功能!
BuddyPress里的bbPress话题添加阅读量计数
我们依旧使用在主题 functions.php
上添加的阅读量计数函数( setPostViews()
与 getPostViews()
)
首先设置阅读量计数:( 统计话题阅读量,添加到 content-single-topic.php
)
<div id="bbpress-forums" class="bbpress-wrapper">
<?php //设置阅读量计数
setPostViews(bbp_get_topic_id()); ?>
<?php bbp_breadcrumb(); ?>
<?php do_action( 'bbp_template_before_single_topic' ); ?>
<?php if ( post_password_required() ) : ?>
然后显示阅读量计数:
我需要在话题列表( loop-single-topic.php
)
<?php do_action( 'bbp_theme_before_topic_started_by' ); ?>
<span class="bbp-topic-started-by"><?php printf( esc_html__( 'Started by: %1$s', 'bbpress' ), bbp_get_topic_author_link( array( 'size' => '14' ) ) ); ?></span>
<?php if ( bbp_is_single_forum() || ( bbp_get_topic_forum_id() == bbp_get_forum_id() ) ) : ?>
<?php //显示阅读量计数
echo '<span class="postviews-icon">'; echo getPostViews(bbp_get_topic_id()); echo '</span>'; ?>
<?php endif; ?>
<?php do_action( 'bbp_theme_after_topic_started_by' ); ?>
<?php if ( !bbp_is_single_forum() || ( bbp_get_topic_forum_id() !== bbp_get_forum_id() ) ) : ?>
<?php do_action( 'bbp_theme_before_topic_started_in' ); ?>
<span class="bbp-topic-started-in"><?php printf( esc_html__( 'in: %1$s', 'bbpress' ), '<a href="' . bbp_get_forum_permalink( bbp_get_topic_forum_id() ) . '">' . bbp_get_forum_title( bbp_get_topic_forum_id() ) . '</a>' ); ?></span>
<?php //显示阅读计数
echo '<span class="postviews-icon">'; echo getPostViews(bbp_get_topic_id()); echo '</span>'; ?>
<?php do_action( 'bbp_theme_after_topic_started_in' ); ?>
话题帖子内容( loop-single-reply.php
)显示阅读计数
<?php if ( bbp_get_topic_id() == bbp_get_reply_id() ) : ?>
<?php //显示阅读计数
echo '<span class="postviews-icon">'; echo getPostViews(bbp_get_topic_id()); echo ' </span>'; ?>
<?php endif; ?>
<?php do_action( 'bbp_theme_before_topic_favorites_action' ); ?>
<?php
//收藏
bbp_topic_favorite_link(); ?>
<?php do_action( 'bbp_theme_after_topic_favorites_action' ); ?>
<?php do_action( 'bbp_theme_before_topic_subscription_action' ); ?>
<?php
//订阅
bbp_topic_subscription_link(); ?>
<?php do_action( 'bbp_theme_after_topic_subscription_action' ); ?>
好了,现在BuddyPress里的bbPress话题添加阅读量计数已经布置完成。
可是,布置完成后测试发现了一些奇怪的问题…
BuddyPress群组的bbPress话题添加阅读量计数遇到的问题及解决问题
遇到的奇怪问题如下:
- 独立的bbPress论坛版块里的话题阅读量计数准确无误。
- 部分BuddyPress群组里论坛版块的话题阅读量计数准确无误
- 部分BuddyPress群组里论坛版块的话题阅读量计数每点击(阅读)1次,阅读量计数为2。
是不是有点奇怪?
面对这样的问题,如何分析或该从哪里着手解决?
这个问题实际上困扰了我2天多的时间,最后才找到问题的根源,最终才完美解决。
分析问题的过程
- 首先怀疑的是由于在bbPress论坛设置为BuddyPress设置了——使用–父级–包含群组论坛
因为我在本地的测试环境里已有一个先前已经创建好的群组,bbPress论坛设置为BuddyPress设置了——使用–无父级–包含群组论坛(也仅有一个群组,为此造成了误判),该群组版块里的话题阅读量计数是准确无误的。
于是考虑到正式网站上的部分BuddyPress群组里论坛版块的话题阅读量计数准确无误的,是先前创建的群组——使用–无父级–包含群组论坛,部分BuddyPress群组里论坛版块的话题阅读量计数每点击(阅读)1次,阅读量计数为2的,肯定是——使用–父级–包含群组论坛所导致的!
然后马上在本地环境设置bbPress论坛——使用–父级–包含群组论坛
果然马上见效!只要在bbPress论坛设置了——使用–父级–包含群组论坛,之后创建的群组版块里的话题阅读量计数每点击(阅读)1次,阅读量计数为2。再次印证了问题绝对是出在这!只要在bbPress论坛这里更改了设置——使用–父级–包含群组论坛,即使把bbPress论坛设置改回原来的默认设置——使用–无父级–包含群组论坛,也无法改变之后在BuddyPress创建的群组论坛版块话题阅读量计数每点击(阅读)1次,阅读量计数为2的问题!
就在这个逻辑下折腾了一天的时间,我以为是bbPress论坛设置不生效,或已经生效了,数据库依旧还保持原有设置没有改变….,我甚至在本地环境安装了 php myadmin
进入数据库一一对比正式网站上面正常的群组的数据,没有发现任何把柄!
最终心力憔悴,一无所获!难道数据库还有隐藏在深处的某些正常情况下无法读取的数据?😂
- 然后分析,难道是阅读量计数函数不兼容BuddyPress里的bbPress
点击一次,阅读量记录却是2次?头疼!无意中发现在IE11浏览器下阅读量计数却是准确无误的!这导致问题更是错综复杂了!!头晕!越来越觉得,这个问题我根本就没有能力去解决,算了吧,别为难自己,该放弃的时候还是得放弃…!
- 然后怀疑是bbPress对接BuddyPress的模板或函数上面的问题
如果是这个层面的问题,大概也没有什么能力可以解决了,完全只能靠懵!
在执着与放弃的边缘上徘徊
IE11浏览器却能正确无误的计数,Chrome与Edge都是点击1次,阅读量计数为2 … 这个问题一直在脑海里游来游去,愣是无法把它甩开。
累…,一无所获….,憔悴、失望、鼠标在漫无目的左移右点…..
呃 !!???
世界上最远的距离不是生与死的距离,而是,明明就在眼前,我却没有发现你!
可是,现在,我已经发现了你,就在我的眼前!
BuddyPress群组里论坛版块的话题阅读量计数准确无误的,都是有封面图片的!
BuddyPress群组里论坛版块的话题阅读量计数每点击(阅读)1次,阅读量计数为2的,都是没有封面图片的!
终于…!我终于发现了你,就站在我的面前!🙃 完美…!
过程比记录的更错综复杂,语文实在不行,许多事情实在是无法用文字还原。