Filter In Reply comments from WordPress Admin Panel

Is there any way to filter the comments that are In Reply from the comments list? I basically just want to see the depth 1 comments on a separate filter.

@GhostToast Ive added this to create a new filter ‘Ask’ on the Admin Comments Panel. is there a way to just apply your top level comments filter code to this Ask filter?
That would be really good because the All comments filter still works and the Ask is filtered by showing only the top level ones…


add_action( 'current_screen', 'wpse_72210_comments_exclude_lazy_hook', 10, 2 );

/**
 * Delay hooking our clauses filter to ensure it's only applied when needed.
 */
function wpse_72210_comments_exclude_lazy_hook( $screen )
{
    if ( $screen->id != 'edit-comments' )
        return;

    // Check if our Query Var is defined    
    if( isset( $_GET['ask'] ) )
        add_action( 'pre_get_comments', 'wpse_63422_list_comments_from_specific_post', 10, 1 );

    add_filter( 'comment_status_links', 'wpse_63422_new_comments_page_link' );
}

/**
 * Only display comments of specific post_id
 */ 
function wpse_63422_list_comments_from_specific_post( $clauses )
{
    $clauses->query_vars['post_id'] = 12;
}

/**
 * Add link to specific post comments with counter
 */
function wpse_63422_new_comments_page_link( $status_links )
{
    $count = get_comments( 'post_id=12&count=1' );

    if( isset( $_GET['ask'] ) ) 
    {
        $status_links['all'] = 'All';
        $status_links['ask'] = 'Ask ('.$count.')';
    } 
    else 
    {
        $status_links['ask'] = 'Ask ('.$count.')';
    }

    return $status_links;
}

Related posts

1 comment

  1. In your comments loop, skip the children:

    if( !empty( $comment->comment_parent ) ) { 
        //if the comment has a parent, skip it as it's not level 1
        continue;
    }
    

    Edit: Above example would only help in the reading loop, below example should help in admin area:

    add_filter('the_comments', 'top_level_comments_filter');
    
    function top_level_comments_filter($comments){
        global $pagenow;
        if($pagenow == 'edit-comments.php'){
            foreach($comments as $key => $value){
                if( !empty( $value->comment_parent ) ) { 
                    unset($comments[$key]);
                    continue;
                }
            }
        }
        return $comments;
    }
    

    Edit: Per your addendum to the original question, this would be how you put it all together. I’ve cleaned up your code a little and given the functions a cohesive name-space. This lumps the filter I gave you in with the condition of the ask query var being set:

    add_action( 'current_screen', 'dreis_comments_exclude_lazy_hook', 10, 2 );
    
    /**
     * Delay hooking our clauses filter to ensure it's only applied when needed.
     */
    function dreis_comments_exclude_lazy_hook( $screen ) {
        if ( $screen->id != 'edit-comments' ) {
            return;
        }
    
        // Check if our Query Var is defined    
        if( isset( $_GET['ask'] ) ) {
            add_action( 'pre_get_comments', 'dreis_list_comments_from_specific_post', 10, 1 );
            add_filter( 'the_comments', 'dreis_top_level_comments_filter' );
        }
    
        add_filter( 'comment_status_links', 'dreis_new_comments_page_link' );
    }
    
    /**
     * Only display comments of specific post_id
     */ 
    function dreis_list_comments_from_specific_post( $clauses ) {
        $clauses->query_vars['post_id'] = 12;
    }
    
    /**
     * Add link to specific post comments with counter
     */
    function dreis_new_comments_page_link( $status_links ) {
        $count = get_comments( 'post_id=12&count=1' );
    
        if( isset( $_GET['ask'] ) ) {
            $status_links['all'] = 'All';
            $status_links['ask'] = 'Ask ('.$count.')';
        } else {
            $status_links['ask'] = 'Ask ('.$count.')';
        }
    
        return $status_links;
    }
    
    /**
     * Remove non-top-level comments
     */
    function dreis_top_level_comments_filter($comments){
        global $pagenow;
        if($pagenow == 'edit-comments.php'){
            foreach($comments as $key => $value){
                if( !empty( $value->comment_parent ) ) { 
                    unset($comments[$key]);
                continue;
                }
            }
        }
        return $comments;
    }
    

Comments are closed.