给WordPress文章添加点赞功能,其基本思路就是给每篇文章添加一个自定义字段,用这个自定义字段存储赞数;在客户端用Cookie存储是否已经点赞的变量。给BuddyPress的帖子添加点赞功能,思路也是一样的,但BP的帖子和自定义字段在数据库中并不保存在WP原来的表中,要读取/操作它们就要用BP自己的API。给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'> </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,内有更多作品回顾和展示。
您也可以扫描左边的二维码,关注我们的微信公众号,在微信上查看我们的案例。
您也可以扫描左边的二维码,关注我们的微信公众号,在微信上查看我们的案例。