给WordPress / BuddyPress的文章和帖子添加点赞功能

给WordPress文章添加点赞功能,其基本思路就是给每篇文章添加一个自定义字段,用这个自定义字段存储赞数;在客户端用Cookie存储是否已经点赞的变量。给BuddyPress的帖子添加点赞功能,思路也是一样的,但BP的帖子和自定义字段在数据库中并不保存在WP原来的表中,要读取/操作它们就要用BP自己的API。给BuddyPress添加的点赞功能,效果如图:
BuddyPress点赞

首先先贴WP点赞功能的代码

前台显示部分(CSS部分就不贴了,请自定义):

1
2
3
4
5
6
7
<a href="javascript:;" data-action="ding" data-id="<?php the_ID(); ?>" class="favorite<?php if(isset($_COOKIE['brain_ding_'.$post->ID])) echo ' done';?>">
	<?php _e( '赞', 'buddypress_login' ); ?><span class="count"><?php if( get_post_meta($post->ID,'brain_ding',true) ){            
		echo get_post_meta($post->ID,'brain_ding',true);
		} else {
		echo '0';
		}?></span>
</a>

JS部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$(document).ready(function() { 
	$.fn.postLike = function() {
		if ($(this).hasClass('done')) {
		return false;
		} else {
 
		var id = $(this).data("id"),
		action = $(this).data('action'),
		rateHolder = $(this).children('.count');
		rateHolderOut = $(this);
 
		$(rateHolder).html("<span class='favorite_wait'>&nbsp;</span>");
		var ajax_data = {
			action: "brain_like",
			um_id: id,
			um_action: action
		};
		$.post("/wp-admin/admin-ajax.php", ajax_data,
			function(data) {
			$(rateHolder).html(data);
			$(rateHolderOut).addClass('done');
		});
		return false;
	}
};
$(document).on("click", ".favorite",
	function() {
		$(this).postLike();
	});
});

PHP部分,放在function.php内

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
add_action('wp_ajax_nopriv_brain_like', 'brain_like');
add_action('wp_ajax_brain_like', 'brain_like');
function brain_like(){
	global $wpdb,$post;
	$id = $_POST["um_id"];
	$action = $_POST["um_action"];
	if ( $action == 'ding'){
		$brain_raters = get_post_meta($id,'brain_ding',true);
		$expire = time() + 99999999;
		$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false; // make cookies work with localhost
		setcookie('brain_ding_'.$id,$id,$expire,'/',$domain,false);
		if (!$brain_raters || !is_numeric($brain_raters)) {
			update_post_meta($id, 'brain_ding', 1);
		} 
		else {
			update_post_meta($id, 'brain_ding', ($brain_raters + 1));
		}
			echo get_post_meta($id,'brain_ding',true);
	}
	die;
}

BP点赞功能的代码

区别不大,只是WP用的get_post_meta/update_post_meta函数,要换成bp_activity_get_meta/bp_activity_update_meta

前台部分

1
2
3
4
5
6
7
<a href="javascript:;" data-action="ding_bp" data-id="<?php echo bp_get_activity_id(); ?>" class="favorite<?php if(isset($_COOKIE['brain_ding_bp_'.bp_get_activity_id()])) echo ' done';?>">
	<?php _e( '赞', 'buddypress_login' ); ?><span class="count"><?php if( bp_activity_get_meta(bp_get_activity_id(),'brain_ding_bp',true) ){            
		echo bp_activity_get_meta(bp_get_activity_id(),'brain_ding_bp',true);
		} else {
		echo '0';
		}?></span>
</a>

JS部分不变,PHP部分,连同之前的写在一起:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
add_action('wp_ajax_nopriv_brain_like', 'brain_like');
add_action('wp_ajax_brain_like', 'brain_like');
//Auther: Brain1981 - https://blog.brain1981.com
function brain_like(){
	global $wpdb,$post;
	$id = $_POST["um_id"];
	$action = $_POST["um_action"];
	if ( $action == 'ding'){
		$brain_raters = get_post_meta($id,'brain_ding',true);
		$expire = time() + 99999999;
		$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false; // make cookies work with localhost
		setcookie('brain_ding_'.$id,$id,$expire,'/',$domain,false);
		if (!$brain_raters || !is_numeric($brain_raters)) {
			update_post_meta($id, 'brain_ding', 1);
		} 
		else {
			update_post_meta($id, 'brain_ding', ($brain_raters + 1));
		}
			echo get_post_meta($id,'brain_ding',true);
	}
	if ( $action == 'ding_bp'){
		$brain_raters = bp_activity_get_meta($id,'brain_ding_bp',true);
		$expire = time() + 99999999;
		$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false; // make cookies work with localhost
		setcookie('brain_ding_bp_'.$id,$id,$expire,'/',$domain,false);
		if (!$brain_raters || !is_numeric($brain_raters)) {
			bp_activity_update_meta($id, 'brain_ding_bp', 1);
		} 
		else {
			bp_activity_update_meta($id, 'brain_ding_bp', ($brain_raters + 1));
		}
			echo bp_activity_get_meta($id,'brain_ding_bp',true);
	}
	die;
}

本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.brain1981.com/1427.html。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

如本文对你有用,请在页面右侧栏扫码领取我的支付宝红包,作为打赏吧 (喂到底是我赏你还是你赏我啊-_-!)

关注我们的微信公众号-JennyStudio 本站记录了近几年的工作中遇到的一些技术问题和解决过程,“作品集”还收录了本人的大部分作品展示。除了本博客外,我们的工作室网站 – JennyStudio,内有更多作品回顾和展示。
您也可以扫描左边的二维码,关注我们的微信公众号,在微信上查看我们的案例。

发表评论

电子邮件地址不会被公开。 必填项已用*标注