WordPress创建评论小工具(widget)及评论不显示管理员回复内容

十二月 23
磊子 2011年 16 条评论

我们在使用wordpress默认的小工具,近期评论这个功能的时候,你会发现它会把管理员回复的内容也会显示出来,感觉有点多余。如果管理员一个一个回复用户的话,那侧边栏上面都是管理员的回复内容,方法有很多种,磊子自己重新做一个最新评论的小工具(widget)这样可以为大家巩固下前面说到的内容。

首先你得知道怎样创建小工具(widget),磊子在之前已经写过这方面的文章,大家可以先去这两个地方了解一下,http://www.favortt.com/wordpress-widget-shuoming.htmlhttp://www.favortt.com/wordpress-widget-jiangjie-2.html 然后在看这篇文章,这样会比较清楚些,然后就是去掉管理员评论,我们只需要通过一条SQL语句就可以把它屏蔽掉。

磊子把完整代码给大家贴出来,然后做下解释:

class Lei_RecentCommentWidget extends WP_Widget_Recent_Comments {

//这里需要说明一下,之前文章说到的是定义的类继承的是WP_Widget,这里继承的是WP_Widget_Recent_Comments,原因很简单因为我们只需要将管理员的回复去掉,而其他的内容我们可以使用wordpress默认的最新评论的小工具,避免重复在写一次代码,提高效率。

       function Lei_RecentCommentWidget() {
		$widget_ops = array('classname' => 'widget_lei_recent_comments', 'description' => __('Lei - 最新评论','leizi') );
		$this->WP_Widget('lei-recent-comments', __('Lei - 最新评论','leizi'), $widget_ops);
	}

	function widget( $args, $instance ) {
		global $wpdb, $comments, $comment;

		extract($args, EXTR_SKIP);
		$title = apply_filters('widget_title', empty($instance['title']) ? __('最新评论','leizi') : $instance['title']);
		if ( !$number = (int) $instance['number'] )
			$number = 5;
		else if ( $number < 1 )
			$number = 1;
		else if ( $number > 15 )
			$number = 15;

//$number对文章进行的判断,这里默认最大显示15条评论。

		if ( !$comments = wp_cache_get( 'recent_comments', 'widget' ) ) {
			$comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE user_id !=1 and comment_approved = '1' and comment_type not in ('pingback','trackback') ORDER BY comment_date_gmt DESC LIMIT 15");
			wp_cache_add( 'recent_comments', $comments, 'widget' );
		}

//利用SQL语句将管理员的回复屏蔽掉,一般管理员的ID编号是为1的,所以我们只要将里面的条件语句中加上user_id!=1这段就可以了。以上的SQL语句就可以理解为评论审核通过的,并且用户ID不为1,评论类型不是pingback和trackback的评论内容显示出来。

              $comments = array_slice( (array) $comments, 0, $number );
//利用php函数array_slice得到我们想要的值,以数组的形式显示
?>
		<?php echo $before_widget; ?>
			<?php if ( $title ) echo $before_title . $title . $after_title; ?>
			<ul id="recentcomments"><?php
			if ( $comments ) : foreach ( (array) $comments as $comment) :
			?>

			<li class="recentcomments">

			<?php
			echo get_avatar($comment,28);//显示评论头像
			$content = apply_filters('get_comment_text', $comment->comment_content);
			$content = mb_strimwidth(strip_tags($content),0,'65','...','UTF-8');//截取内容来控制页面的排版
			$content = convert_smilies($content);//显示评论的图片
			echo '<span style="float:left; width:200px;">'.$content.'</span>';
			?>
             <div style=" clear:both; padding-top:10px; border-top:1px dashed #e0e0e0;">
			<?php
			echo sprintf(_x('%1$s on %2$s', 'widgets'), get_comment_author(), '<a href="' . esc_url( get_permalink($comment->comment_post_ID) ) . '">' . get_the_title($comment->comment_post_ID) . '</a>'); ?>

             //输出内容,以及评论者,在什么地方发表的评论。
             </div>
			</li>
            <?php endforeach; endif;?>
            </ul>
		<?php echo $after_widget; ?>
<?php
	}
}
?>

以上代码的功能大概效果就是磊子网站上侧边栏的最新评论。接着将上面的代码保存为php文件,例如命名为lei-recent-commnet.php,然后我们需要激活这个功能。可以再创建一个php文件比如叫register-widget.php,然后将刚刚创建好的lei_recent_commnet.php引入进来,方法是:

<?php  

include_once (TEMPLATEPATH . '/includes/widgets/lei-recent-comment.php');

//引入lei-recent-comment.php文件,这里注意修改成自己的文件目录

add_action("widgets_init", "add_lei_widgets");
function load_ts_widgets() {
	register_widget("Lei_RecentCommentWidget");
}
//激活这个功能
?>

这样做的目的是便于集中管理,如果以后我们还需要在进行添加的小工具(widget)的时候就可以直接对一个文件进行修改了。建议大家以后也这么做,良好的习惯可以为我们省很多的事情。

最后我再将register-widget.php文件引入到主题的functions.php里面就可以。方法和上面的一样。即:

require_once TEMPLATEPATH . '/includes/register-widgets.php';

//注意修改成自己的文件目录

这样一个最新评论的小工具了(widget)就制作好了。这里面涉及到了一些wordpress和php函数。如果大家对一些函数不清楚的,可以来这地方进行查阅(没有的话可以先去官网看看),http://www.favortt.com/wordpress-functions-class以后每次写的文章涉及到函数的,磊子都会在这个地址发布出来!这样有对函数不熟悉的就可以查阅的到了。

» 版权所有©转载必须以链接形式注明作者和原始出处:磊子的博客 » WordPress创建评论小工具(widget)及评论不显示管理员回复内容
» 地址:( Ctrl+C 复制 )
» 如果对本站感兴趣,请到网站右下方订阅本站,将为你带来更多精彩和实用的文章
» 如果您对这篇文章感兴趣,不妨小小的 捐助(Donate)一下博主吧,不管多少都是对博主最大的支持和鼓励哟,博主-磊子感谢大家的支持!!!

16 条留言 其中:访客:9 条, 博主:6 条

  1. 北京SEO说:

    学习了,嘻嘻

  2. Youth.霖说:

    这个真高大上!不用改源程序,比其它方法好!

  3. Pingback: 彩色标签云 | 一个小小的博客

  4. 惠州SEO说:

    这个技术性太强了,搞不来 ,真的好想不在首页显示管理员的评论,难道没有适合我们这些菜鸟的方法么,怎么办?

    • 磊子说:

      这个其实就是最好的方法了,耐心点看看咯!呵呵! 或者像楼下说的那样操作也是可以的! 祝你成功!

  5. Duoqiu说:

    如果想直接加一段代码在functions要怎么加。。。

    • 磊子说:

      你可以将 function widget( $args, $instance )里面的代码拿出来,放到functions里面重新命名个方法。做下小小的修改就可以了!

  6. 好厉害啊,我还是用插件吧 :neutral: :neutral:

  7. 520PC说:

    不错 :razz:

  8. 妃子笑说:

    你的博客模板真的挺好看的,请问一下这个模板的名字是什么,能不能给个关键字我在网上找一下?谢谢!

  9. 晕了!

说点什么吧




订阅本站