Comments: Don't show the filter/pagination actions if there are no comments to list.

It doesn't make sense to be able to filter the comments list table when there are are no (trashed/spam) comments available.

Fixes #40188.
Props swissspidy, Jim_Panse, menakas, akbarhusen429, dinhtungdu, birgire, SergeyBiryukov, davidbaumwald, rebasaurus, whyisjake.


Built from https://develop.svn.wordpress.org/trunk@48521


git-svn-id: http://core.svn.wordpress.org/trunk@48283 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
whyisjake 2020-07-21 00:29:02 +00:00
parent e4ce35dd11
commit 5c836585d1
2 changed files with 67 additions and 31 deletions

View File

@ -387,43 +387,24 @@ class WP_Comments_List_Table extends WP_List_Table {
if ( ! isset( $has_items ) ) {
$has_items = $this->has_items();
}
?>
<div class="alignleft actions">
<?php
echo '<div class="alignleft actions">';
if ( 'top' === $which ) {
?>
<label class="screen-reader-text" for="filter-by-comment-type"><?php _e( 'Filter by comment type' ); ?></label>
<select id="filter-by-comment-type" name="comment_type">
<option value=""><?php _e( 'All comment types' ); ?></option>
<?php
/**
* Filters the comment types dropdown menu.
*
* @since 2.7.0
*
* @param string[] $comment_types An array of comment types. Accepts 'Comments', 'Pings'.
*/
$comment_types = apply_filters(
'admin_comment_types_dropdown',
array(
'comment' => __( 'Comments' ),
'pings' => __( 'Pings' ),
)
);
ob_start();
foreach ( $comment_types as $type => $label ) {
echo "\t" . '<option value="' . esc_attr( $type ) . '"' . selected( $comment_type, $type, false ) . ">$label</option>\n";
}
?>
</select>
<?php
$this->comment_status_dropdown( $comment_type );
/**
* Fires just before the Filter submit button for comment types.
*
* @since 3.5.0
*/
do_action( 'restrict_manage_comments' );
submit_button( __( 'Filter' ), '', 'filter_action', false, array( 'id' => 'post-query-submit' ) );
$output = ob_get_clean();
if ( ! empty( $output ) && $this->has_items() ) {
echo $output;
submit_button( esc_html__( 'Filter' ), '', 'filter_action', false, array( 'id' => 'post-query-submit' ) );
}
}
if ( ( 'spam' === $comment_status || 'trash' === $comment_status ) && current_user_can( 'moderate_comments' ) && $has_items ) {
@ -480,6 +461,55 @@ class WP_Comments_List_Table extends WP_List_Table {
return $columns;
}
/**
* Displays a comment status drop-down for filtering on the Comments list table.
*
* @since 5.5.0
*
* @param string $comment_type The current comment type slug.
*/
protected function comment_status_dropdown( $comment_type ) {
/**
* Filters the comment types dropdown menu.
*
* @since 2.7.0
*
* @param array $comment_types An array of comment types. Accepts 'Comments', 'Pings'.
*/
$comment_types = apply_filters(
'admin_comment_types_dropdown',
array(
'comment' => esc_html__( 'Comments' ),
'pings' => esc_html__( 'Pings' ),
)
);
if ( $comment_types && is_array( $comment_types ) ) {
printf( '<label class="screen-reader-text" for="filter-by-comment-type">%s</label>', esc_html__( 'Filter by comment type' ) );
echo '<select id="filter-by-comment-type" name="comment_type">';
printf( "\t<option value=''>%s</option>", esc_html__( 'All comment types' ) );
foreach ( $comment_types as $type => $label ) {
if ( get_comments(
array(
'number' => 1,
'type' => $type,
)
) ) {
printf(
"\t<option value='%s'%s>%s</option>\n",
esc_attr( $type ),
selected( $comment_type, $type, false ),
esc_html( $label )
);
}
}
echo '</select>';
}
}
/**
* @return array
*/
@ -511,8 +541,14 @@ class WP_Comments_List_Table extends WP_List_Table {
*/
public function display() {
wp_nonce_field( 'fetch-list-' . get_class( $this ), '_ajax_fetch_list_nonce' );
static $has_items;
$this->display_tablenav( 'top' );
if ( ! isset( $has_items ) ) {
$has_items = $this->has_items();
if ( $has_items ) {
$this->display_tablenav( 'top' );
}
}
$this->screen->render_screen_reader_content( 'heading_list' );

View File

@ -13,7 +13,7 @@
*
* @global string $wp_version
*/
$wp_version = '5.5-beta2-48520';
$wp_version = '5.5-beta2-48521';
/**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.