将wordpress原生评论改造成论坛形式

WordPress技术博客wp应用技术

回看网站出现的最早出现的形式,就是以bbs的形式出现的,即发一篇文章,可以让别的用户回复,这样一个最初非常简单的形式,现在得到了众多扩展,但是所有的网站不管是门户网站、博客、商铺等等都可以发现他们共同的特点,那就是以bbs的最原始方式的多种体现。

所以,今天我们来说一说,如何将wordpress的原生评论机制,作为一个bbs来呈现。

我们的新版官网加入这一功能,可以提供给大家一个提问和交流的社区,那么,我们如果需要修改wordpress原生评论,需要怎么做呢?

下面我们来看一看论坛的基本形式:

1.注册用户可以发帖2.论坛的排序机制—— 有新评论的文章被顶到第一行
3.可以回帖,最新的回帖在第一行
4.显示发帖人和回帖人的信息(头像、昵称、描述等)

 

这样一看,wordpress的原生评论需要修改的地方就变成如下几个地方:

1.增加wordpress前端投稿功能
2.改进论坛区域的文章(帖子)排列机制——按照评论的新旧排列
3.回帖的样式修改(增加调用发帖人-回帖人的头像、名称等信息)

说了这么多,小编吧这次官网已经改造好的bss页面截图发一些,你就可以清晰的看到和原生评论有所不同的地方了。

bbs-wordpress-themepark

 

改造你的wordpress原生评论为bbs

1.增加前端投稿功能

前端投稿功能,目前的网络上有很多,具体可以参考露兜博客的一篇文章  wordpress添加投稿功能

利用这篇文章制作一个投稿页面,这个功能的实现是利用wordpress的一个函数:wp_insert_post   插入文章

你可以对其进行改造,默认的功能是会将用户的用户昵称、电子邮件和用户网站发送到正文,你可以将这些删除掉  ,具体可以将“添加表单处理代码”中的62行(详见露兜博客博文)

$post_content = '昵称: '.$name.'<br />Email: '.$email.'<br />blog: '.$blog.'<br />内容:<br />'.$content;

修改为:

$post_content = $content;

这样就可以只输出正文了

 

2.改造评论和发帖人

发帖人的帖子正文模块很容易解决,这个模块和wordpress的文章模块一样,不同的是,我们需要调用作者(发帖人)的信息,如头像、发帖人昵称、网站、发贴数量等等。

下面是调用作者信息的代码(php):

get_avatar( get_the_author_email(), 60 );//调用作者头像

get_the_author()//作者昵称

get_author_posts_url( get_the_author_meta( ‘ID’ )) ; //作者归档链接

echo the_author_posts();  //发帖数量

这样你就能轻松的调用好发帖人(楼主)的信息了

 

3.评论列表的改造

评论列表的改造也非常简单,使用wp_list_comments,网上有大量的可使用的列表资料,这里不做阐述

这里我们要说的是,需要判断一下,是否是楼主回复

function is_author_comment( $comment_ID = 0 ) {
$comment = get_comment( $comment_ID );
$authorid=get_the_author_meta( "id");
$admin_comment = false; //设置一个布尔类型的变量用于判断该留言的ID是否为楼主(作者)的回复
if($comment->user_id == $authorid){
$author_comment = true;
}
return$author_comment;
}

这段代码添加进到functions.php中

然后在wp_list_comments中找到一个合适的位置,写入判断:

<?php  if (is_author_comment($comment->comment_ID)) :?>

//楼主回复,可以使用图片,或者文字提示下
<?php endif; ?>

这样就能够把楼主的回复和其他人的回复区分开了。

 

4.帖子的排序问题

这些问题解决之后,最后解决一下排序的问题,我们想要像论坛一样,有人顶贴,帖子会被顶起来,这需要使用最后的评论时间来作为判断

将如下代码放入functions.php中

function comment_meta_update($comment_ID) {
// 发布新评论更新commentTime字段值
$comment = get_comment($comment_ID);
$my_post_id = $comment->comment_post_ID;
update_post_meta($my_post_id, 'commentTime', time());
}function comment_meta_delete($post_ID) {
// 删除文章同时删除commentTime字段
global $wpdb;
if(!wp_is_post_revision($post_ID)) {
delete_post_meta($post_ID, 'commentTime');
}
}
add_action('save_post', 'comment_meta_add');
add_action('delete_post', 'comment_meta_delete');
add_action('comment_post', 'comment_meta_update');

 

在论坛列表中,使用query_posts来控制一下文章的输出:

<?php$posts = query_posts($query_string . '&orderby=meta_value&showposts=10&meta_key=commentTime&order=DESC'); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

 

原理:加入到functions.php中的代码会再文章发布时候,自动添加一个自定义字段commentTime记录评论的时间,有新评论时会自动更新时间。下面使用query_posts  正是使用这一自定义栏目判断,来达到顶帖子的效果。

现在,你明白如何利用wordpress制作一个bbs吗?  当然,wordpress制作出来的是非常简单的bbs,小型的社区也基本上够用啦,并且,还可以扩展一下他的功能,比如安装一下会员相关插件,增加用户等级,称号,积分等等,又比如可以增加一个必须要回复才能显示的内容,这些都是可以达到的。

当然,昨天我发布的一篇文章也许对大家也有用,这里可以附带再说一下:如果你使用了多说,那么你改造的bbs也会被多说给覆盖掉,利用之前发布的代码,在文章插入时,自动关闭多说评论即可

在露兜的那篇文章中找到这段代码:

$status = wp_insert_post( $tougao );

在这段代码下面添加:

$status = wp_insert_post( $tougao );
add_post_meta($status, 'duoshuo_status', 'disabled');

即可在前端发布帖子时,自动关闭多说的评论了。

说了这么多,如果你有兴趣可以自己试一试,等到官网更新之后,欢迎来我们的bbs进行讨论哦!~

上一篇:

下一篇:

文章评论

您好!请登录

取消回复
  1. 软件酷 回复

    有演示了吗?


  2. alex 回复

    太牛了,学习。


  3. 好店品gshop123.com 回复

    实际样例有木有!


    • WEB主题公园
      WEB主题公园-管理员 回复

      官网更新之后就会有了 ,届时会放出源码


      • 好店品gshop123.com 回复

        期待一下!!!


        • TACTK 回复

          测试


          • TACTK 回复

            盖楼啊……


展开更多