List Tables: Do not show filter button when there are no filter options available.

Props juhise, dipesh.kakadiya, swissspidy.
Fixes #37407.

git-svn-id: https://develop.svn.wordpress.org/trunk@38854 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Pascal Birchler 2016-10-21 10:32:55 +00:00
parent 5fb3d3f279
commit f508d80a1b
2 changed files with 54 additions and 2 deletions

View File

@ -459,6 +459,7 @@ class WP_Posts_List_Table extends WP_List_Table {
<div class="alignleft actions">
<?php
if ( 'top' === $which && !is_singular() ) {
ob_start();
$this->months_dropdown( $this->screen->post_type );
$this->categories_dropdown( $this->screen->post_type );
@ -479,7 +480,12 @@ class WP_Posts_List_Table extends WP_List_Table {
*/
do_action( 'restrict_manage_posts', $this->screen->post_type, $which );
submit_button( __( 'Filter' ), '', 'filter_action', false, array( 'id' => 'post-query-submit' ) );
$output = ob_get_clean();
if ( ! empty( $output ) ) {
echo $output;
submit_button( __( 'Filter' ), '', 'filter_action', false, array( 'id' => 'post-query-submit' ) );
}
}
if ( $this->is_trash && current_user_can( get_post_type_object( $this->screen->post_type )->cap->edit_others_posts ) ) {
@ -1552,7 +1558,7 @@ class WP_Posts_List_Table extends WP_List_Table {
<?php foreach ( $flat_taxonomies as $taxonomy ) : ?>
<?php if ( current_user_can( $taxonomy->cap->assign_terms ) ) :
$taxonomy_name = esc_attr( $taxonomy->name );
?>
<label class="inline-edit-tags">
<span class="title"><?php echo esc_html( $taxonomy->labels->name ) ?></span>

View File

@ -9,6 +9,11 @@ class Tests_Admin_includesListTable extends WP_UnitTestCase {
protected static $grandchildren = array();
protected static $post_ids = array();
/**
* @var WP_Posts_List_Table
*/
protected $table;
function setUp() {
parent::setUp();
set_current_screen( 'edit-page' );
@ -191,4 +196,45 @@ class Tests_Admin_includesListTable extends WP_UnitTestCase {
}
}
/**
* @ticket 37407
*/
function test_filter_button_should_not_be_shown_if_there_are_no_posts() {
// Set post type to a non-existent one.
$this->table->screen->post_type = 'foo';
ob_start();
$this->table->extra_tablenav( 'top' );
$output = ob_get_clean();
$this->assertNotContains( 'id="post-query-submit"', $output );
}
/**
* @ticket 37407
*/
function test_months_dropdown_should_not_be_shown_if_there_are_no_posts() {
// Set post type to a non-existent one.
$this->table->screen->post_type = 'foo';
ob_start();
$this->table->extra_tablenav( 'top' );
$output = ob_get_clean();
$this->assertNotContains( 'id="filter-by-date"', $output );
}
/**
* @ticket 37407
*/
function test_category_dropdown_should_not_be_shown_if_there_are_no_posts() {
// Set post type to a non-existent one.
$this->table->screen->post_type = 'foo';
ob_start();
$this->table->extra_tablenav( 'top' );
$output = ob_get_clean();
$this->assertNotContains( 'id="cat"', $output );
}
}