如何获得最后的评论,而不是来自管理员(或其他特定的用户角色/能力)?

时间:2012-08-07 作者:Diana

我正在使用get_comments 显示最新评论,即:

<?php
    global $comments, $comment;
    $comments = get_comments( array( \'number\' => \'5\', \'status\' => \'approve\', \'post_status\' => \'publish\' ) );

    foreach ( (array) $comments as $comment) {
     echo \'<li>\'.$comment->comment_author.\' said \'.$comment->comment_content .\'</li>\'
    }
;?>
有什么方法可以覆盖管理员的评论吗?!我知道this tip 使用SQL,但我可能在这个函数中遗漏了什么?

谢谢你的帮助。

Updated code将此代码放置在模板文件的任何位置,例如sidebar.php, footer.php 并将列出最新的评论(显示管理员评论)。

3 个回复
SO网友:kaiser

耶!我们有过滤器

包装$wpdb 将注释直接查询到过滤器回调(和插件)中是处理注释的好方法。

/* Plugin Name: »Kaisers« Comments without admin comments */
! defined( \'ABSPATH\' ) AND exit;

add_filter( \'comments_array\', \'wpse_61072_comments_without_admin\', 20, 2 );
function wpse_61072_comments_without_admin( $comments, $post_id )
{
    foreach ( (array) $comments as $index => $c )
    {
        // Add a limit
        if ( 5 <= absint( $index + 1 ) )
            return (object) $comments;

        // Get the authors user data
        $author = get_userdata( $c->user_id );
        // Unset based on the standard/default capability
        if ( user_can( $author->ID, \'manage_options\' ) )
            unset( $comments[ $index ] );
    }

    return (object) $comments;
}
这个应该可以工作(未测试)。

SO网友:amit

注意-

它使用存储在全局变量-wp_query. 通常是wp_query 变量包含浏览时当前帖子的注释。

Usage -

$comments = wpse61072_hide_admin_comment(5); // 5=max comments
foreach  ( $comments as $comment ) {
    echo \'<li>\'.$comment->comment_author.\' - said : \'.$comment->comment_content.\'</li>\';
    
}

Functions.php -

/*
 * Usage : $comments = wpse61072_hide_admin_comment($post->ID, 5);      
 * Show Count : echo count(wpse61072_hide_admin_comment($post->ID, 5));     
 
 * This goes into functions.php 
*/
function wpse61072_hide_admin_comment ( $post_id, $no ) {
    global $wp_query; // uses global variable
    $woa_comments = $wp_query->comments;
    
    //thanks @kaiser for loop
    foreach ( $woa_comments as $woa_comment => $woac ) {    
        $author = get_userdata( $woac->user_id );
        if (user_can( $author, \'manage_options\' )) {    
            unset( $woa_comments[ $woa_comment ] );
        }
    }
    
    //make sure we\'re returing only specified elements
    return (array_slice($woa_comments,0,$no));          
}
测试日期wordpress 3.4.1 具有TwentyTen 主题

SO网友:FlashingCursor

完全未经测试,但您应该能够使用pre\\u get\\u comments筛选器:

 function exclude_admin_comments($query) {
    $query->query_vars[\'user_id\'] != 1;
  }

  add_action(\'pre_get_comments\', \'exclude_admin_comments\');

结束

相关推荐

特定用户的wp_count_post、wp_count_Terms和wp_count_Comments?

有没有办法实现这些功能wp_count_posts, wp_count_terms 和wp_count_comments 仅为特定用户返回结果,可能使用用户的ID?我正在为自定义帖子类型制作一个自定义的“即时”仪表板小部件,我需要它只显示当前用户的数据,而不是整个站点的数据。提前谢谢。EDIT: 为了回应@kaiser在下面的评论,我做了以下操作,但什么都没有发生-结果与过滤器关闭时的结果相同(不应该是这样-检查此用户是否有不同数量的已发布employee 职位类型)。我的函数中的代码似乎根本没有被调用,