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;
}