最近在开发我们自己的吉他资源平台-乐瑶吉他的时候,用到了文章收藏的功能,之前做这个功能的时候都是适用的现成的插件,这次不想用那么多的插件了,所以就直接自己用代码写了一下这个文章收藏功能。首先将下面的代码放到您的functions.PHP文件中。
/**
* wordpress日记——文章收藏功能
* https://www.wp-diary.com/749.HTML
*/
function post_shoucang(){
if(!get_current_user_ID()){
exit(Json_encode(['msg'=>'请先登录才能收藏哦!']));
}
$ID = $_POST["ID"];
$Meta = get_post_meta($ID,'shoucang',true);
$shoucang1 = explode(',',get_post_meta($ID,true));
$shoucang = array_filter($shoucang1);
$user = get_current_user_ID();
if(in_array($user,$shoucang)){
foreach($shoucang as $k=>$v){
if($v==$user){
unset($shoucang[$k]);
}
}
update_post_Meta($ID,implode(",",$shoucang));
exit(Json_encode(['msg'=>'已取消收藏']));
}else{
array_push($shoucang,$user);
update_post_Meta($ID,$shoucang));
exit(Json_encode(['msg'=>'收藏成功']));
}
}
add_action('wp_AJAX_post_shoucang','post_shoucang');
add_action('wp_AJAX_nopriv_post_shoucang','post_shoucang');
其次,是在文章页中放入下面的HTML代码(收藏按钮)
<?PHP
$shoucang1 = explode(',get_post_meta(get_the_ID(),true));
$shoucang = array_filter($shoucang1);
$user = get_current_user_ID();
?>
<a on";}}} ;?>" data-ID="<?PHP the_ID();?>" href="JavaScript:;">
<span>收藏</span>
</a>
样式方面就自己定义吧,其中,如果文章已经收藏过了,会在收藏按钮的a标签上多一个on的类,你可以使用这个类定义收藏过的样式;
最后,还需要有一段Js文件,你可以放到您的footer.PHP中。
<script> $('a.shoucang').click(function(){
var ID = $(this).data("ID");
$.AJAX({
url: "/wp-admin/admin-AJAX.PHP",
type:'post',
dataType:'Json',
data:{action:'post_shoucang',ID:ID},
success: function(data){
layer.alert(data.msg,function(){
location.reload();
});
}
});
});</script>
为了更好的体验效果,收藏成功以及取消成功的消息提示使用了layer这个jqueryd出层插件,所以,您还需要在主题中引入这个框架的文件(下载地址:http://res.layui.com/static/download/layer/layer-v3.1.1.zip),下载后把整个文件夹放到您的主题目录中,然后在主题头部引入layer.Js
通过以上方法已经完成了对文章的收藏及取消收藏功能(只有登录用户才能收藏)。收藏后大家肯定还需要获取出来每个用户自己收藏的文章的列表,以往使用插件获取收藏列表的时候样式都是固定的,自定义起来就要改插件,但是使用上面的方法,获取收藏列表的时候你想展示什么样的列表就看你自己了。获取方法如下:
<?PHP
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args=array(
'cat' => 5,// 分类ID,如果不需要限定是哪个分类,可以不写这个条件
'showposts' => 16,
'paged' => $paged,
);
query_posts($args);
if(have_posts()) : while (have_posts()) : the_post();
?>
<?PHP
$shoucangMeta1 = explode(',true));
$shoucangMeta = array_filter($shoucangMeta1);
?>
<?PHP if(in_array(get_current_user_ID(),$shoucangMeta)){ ?>
<li>
<a href="<?PHP%20the_permalink();?>" title="<?PHP the_Title();?>">
<div >
<?PHP $thumburl = wp_get_attachment_image_src( get_post_thumbnail_ID(get_the_ID()),array(400,270));?>
<img src="<?PHP%20echo%20$thumburl[0];?>" alt="<?PHP the_Title();?>" title="<?PHP the_Title();?>">
<i ></i>
</div>
<h3><?PHP the_Title();?></h3>
<div >
<span>
<i aria-hIDden="true"></i>
<?PHP the_time('m,d');?>
</span>
<span>
<i aria-hIDden="true"></i>
<?PHP post_vIEws(' ',' 次'); ?>
</span>
<div ></div>
</div>
</a>
<a data-ID="<?PHP the_ID();?>" href="JavaScript:;">取消收藏</a>
</li>
<?PHP } ?>
<?PHP enDWhile; else : ?>
<div >
<img src="<?PHP%20bloginfo('template_directory');%20?>/images/empty.png" >
<p >您还没有收藏任何d唱视频哦~</p>
</div>
<?PHP endif;?>
<div ></div>
<div >
<?PHP par_pagenavi(9); ?>
</div>
<?PHP wp_reset_query(); ?>
仔细看上面的代码,其实就是普通的循环获取文章,只不过在循环中多了个判断,判断当前用户的ID是否在获取到的文章的"shoucang"这个字段里,如果在则显示出来。
总结以上是内存溢出为你收集整理的WordPress纯代码实现文章收藏功能全部内容,希望文章能够帮你解决WordPress纯代码实现文章收藏功能所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)