为BuddyPress里的bbPress版块话题添加阅读量计数

阅读(浏览、点击、查看)文章或话题计数,还是挺不错的,为什么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 '&nbsp;</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的,都是没有封面图片的!

终于…!我终于发现了你,就站在我的面前!🙃 完美…!

过程比记录的更错综复杂,语文实在不行,许多事情实在是无法用文字还原。

发表评论