Notice: Trying to access array offset on value of type bool in /www/wwwroot/weimahe.com/wp-content/advanced-cache.php on line 472

Notice: Trying to access array offset on value of type bool in /www/wwwroot/weimahe.com/wp-content/advanced-cache.php on line 472
WordPress纯代码实现文章收藏功能 - 微码盒
!
也想出现在这里? 联系我们
广告位

WordPress纯代码实现文章收藏功能

最近在开发我们自己的吉他资源平台-乐瑶吉他的时候,用到了文章收藏的功能,之前做这个功能的时候都是适用的现成的插件,这次不想用那么多的插件了,所以就直接自己用代码写了一下这个文章收藏功能。首先将下面的代码放到您的 functions.php 文件中。

  1. function post_shoucang(){
  2. if(!get_current_user_id()){
  3. exit(json_encode(['msg'=>'请先登录才能收藏哦!']));
  4. }
  5. $id = $_POST["id"];
  6. $meta = get_post_meta($id,'shoucang',true);
  7. $shoucang1 = explode(',',get_post_meta($id,'shoucang',true));
  8. $shoucang = array_filter($shoucang1);
  9. $user = get_current_user_id();
  10. if(in_array($user,$shoucang)){
  11. foreach($shoucang as $k=>$v){
  12. if($v==$user){
  13. unset($shoucang[$k]);
  14. }
  15. }
  16. update_post_meta($id, 'shoucang', implode(",",$shoucang));
  17. exit(json_encode(['msg'=>'已取消收藏']));
  18. }else{
  19. array_push($shoucang,$user);
  20. update_post_meta($id, 'shoucang', implode(",",$shoucang));
  21. exit(json_encode(['msg'=>'收藏成功']));
  22. }
  23. }
  24. add_action('wp_ajax_post_shoucang','post_shoucang');
  25. add_action('wp_ajax_nopriv_post_shoucang','post_shoucang');

其次,是在文章页中放入下面的 HTML 代码(收藏按钮):

  1. <?php
  2. $shoucang1 = explode(',',get_post_meta(get_the_ID(),'shoucang',true));
  3. $shoucang = array_filter($shoucang1);
  4. $user = get_current_user_id();
  5. ?>
  6. <a class="shoucang <?php if(in_array($user,$shoucang)){ foreach($shoucang as $k=>$v){if($v==$user){echo "on";}}} ;?>" data-id="<?php the_ID();?>" href="javascript:;" rel="external nofollow" rel="external nofollow" >
  7. <span>收藏</span>
  8. </a>

样式方面就自己定义吧,其中,如果文章已经收藏过了,会在收藏按钮的 a 标签上多一个 on 的类,你可以使用这个类定义收藏过的样式。最后,还需要有一段 JS 文件,你可以放到您的 footer.php 中。

  1. <script> $('a.shoucang').click(function(){
  2. var id = $(this).data("id");
  3. $.ajax({
  4. url: "/wp-admin/admin-ajax.php",
  5. type:'post',
  6. dataType:'json',
  7. data:{action:'post_shoucang',id:id},
  8. success: function(data){
  9. layer.alert(data.msg, function(){
  10. location.reload();
  11. });
  12. }
  13. });
  14. });</script>

为了更好的体验效果,收藏成功以及取消成功的消息提示使用了 layer 这个 jQuery 弹出层插件,所以,您还需要在主题中引入这个框架的文件(下载地址),下载后把整个文件夹放到您的主题目录中,然后在主题头部引入 layer.js

通过以上方法已经完成了对文章的收藏及取消收藏功能(只有登录用户才能收藏)。收藏后大家肯定还需要获取出来每个用户自己收藏的文章的列表,以往使用插件获取收藏列表的时候样式都是固定的,自定义起来就要改插件,但是使用上面的方法,获取收藏列表的时候你想展示什么样的列表就看你自己了。获取方法如下:

  1. <?php
  2. $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
  3. $args=array(
  4. 'cat' => 5, // 分类ID,如果不需要限定是哪个分类,可以不写这个条件
  5. 'showposts' => 16,
  6. 'paged' => $paged,
  7. );
  8. query_posts($args);
  9. if(have_posts()) : while (have_posts()) : the_post();
  10. ?>
  11. <?php
  12. $shoucangmeta1 = explode(',',get_post_meta($id,'shoucang',true));
  13. $shoucangmeta = array_filter($shoucangmeta1);
  14. ?>
  15. <?php if(in_array(get_current_user_id(),$shoucangmeta)){ ?>
  16. <li>
  17. <a class="videolistbox" href="<?php%20the_permalink();?>" title="<?php the_title();?>">
  18. <div class="thumbbox">
  19. <?php $thumburl = wp_get_attachment_image_src( get_post_thumbnail_id(get_the_ID()), array(400,270));?>
  20. <img class="defaultthumb" src="<?php%20echo%20$thumburl[0];?>" alt="<?php the_title();?>" title="<?php the_title();?>">
  21. <i class="videobutton fa fa-caret-square-o-right"></i>
  22. </div>
  23. <h3><?php the_title();?></h3>
  24. <div class="videolisttag">
  25. <span>
  26. <i class="fa fa-calendar" aria-hidden="true"></i>
  27. <?php the_time('m,d');?>
  28. </span>
  29. <span>
  30. <i class="fa fa-eye" aria-hidden="true"></i>
  31. <?php post_views(' ', ' 次'); ?>
  32. </span>
  33. <div class="clearfix"></div>
  34. </div>
  35. </a>
  36. <a class="posteditbutton shoucang" data-id="<?php the_ID();?>" href="javascript:;" rel="external nofollow" rel="external nofollow" >取消收藏</a>
  37. </li>
  38. <?php } ?>
  39. <?php endwhile; else : ?>
  40. <div class="sp-mod-empty">
  41. <img src="<?php%20bloginfo('template_directory');%20?>/images/empty.png" class="empty-images">
  42. <p class="empty-txt">您还没有收藏任何弹唱视频哦~</p>
  43. </div>
  44. <?php endif;?>
  45. <div class="clearfix"></div>
  46. <div class="page_navi text-center">
  47. <?php par_pagenavi(9); ?>
  48. </div>
  49. <?php wp_reset_query(); ?>

仔细看上面的代码,其实就是普通的循环获取文章,只不过在循环中多了个判断,判断当前用户的 id 是否在获取到的文章的"shoucang"这个字段里,如果在则显示出来。

给TA打赏
共{{data.count}}人
人已打赏
WordPress教程

WordPress 自动给图片添加alt标签方法

2023-10-27 14:53:33

WordPress教程

WordPress搜索结果只有一个时直接跳转到结果文章页面

2023-11-3 14:23:32

下载说明

  • 1、微码盒所提供的压缩包若无特别说明,解压密码均为weimahe.com
  • 2、下载后文件若为压缩包格式,请安装7Z软件或者其它压缩软件进行解压;
  • 3、文件比较大的时候,建议使用下载工具进行下载,浏览器下载有时候会自动中断,导致下载错误;
  • 4、资源可能会由于内容问题被和谐,导致下载链接不可用,遇到此问题,请到文章页面进行反馈,以便微码盒及时进行更新;
  • 5、其他下载问题请自行搜索教程,这里不一一讲解。

站长声明

本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有;若为付费资源,请在下载后24小时之内自觉删除;若作商业用途,请到原网站购买;由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系本站删除,我们将及时处理!
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索