您可以创建自己的comments_template
, 它可以是默认函数的重复函数,但唯一的更改是数据库查询。但是您需要自己的功能,因为WP在这里不能帮助您使用过滤器。所以,说出它的名字my_comments_template()
:
$filter = mysql_real_escape_string($_POST[\'comment-filter\']);
if(!empty($filter)) $filter = "AND (comment_content LIKE \'%%{$filter}%%\' OR comment_author LIKE \'%%{$filter}%%\')";
if($user_ID)
$comments = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE (comment_post_ID = %d) {$filter} AND (comment_approved = \'1\' OR (user_id = %d AND comment_approved = \'0\')) ORDER BY comment_date_gmt", $post->ID, $user_ID));
elseif(empty($comment_author))
$comments = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE (comment_post_ID = %d) {$filter} AND (comment_approved = \'1\') ORDER BY comment_date_gmt", $post->ID));
else
$comments = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE (comment_post_ID = %d) {$filter} AND (comment_approved = \'1\' OR (comment_author = %s AND comment_author_email = %s AND comment_approved = \'0\')) ORDER BY comment_date_gmt", $post->ID, wp_specialchars_decode($comment_author, ENT_QUOTES), $comment_author_email));
然后在注释模板文件中添加一个简单表单:
<form action="<?php echo get_permalink(); ?>" method="post" id="comment-filter">
<input type="text" name="comment-filter" rel="<?php _e("Search in comments"); ?>" value="<?php echo esc_attr($_POST[\'comment-filter\']); ?>" size="20" />
</form>
当然要全部替换
comments_template()
函数调用
my_comments_template()
我正在将此代码实现到我正在处理的主题中。我的代码稍微大了一点,因为我添加了ajax&;查询突出显示。。。如果您想看到这一切,请等待我的1.3版本Atom 主题
有一件事我还没有弄清楚,那就是在浏览评论页面时,如何保持$\\u POST[\'comment-filter\']。例如,如果你在5000条评论中搜索某个内容,得到1000条包含该文本的评论,并将其拆分为多个页面,当你切换页面时,评论过滤器查询将丢失,并再次显示2000条评论。。。
此功能在与技术相关的WordPress网站上非常有用,这些网站上有数百条帖子评论。。。