WordPress.org

Make WordPress Core

Ticket #45298: 45298.3.diff

File 45298.3.diff, 4.4 KB (added by audrasjb, 14 months ago)

Menus: Allow searching for empty taxonomy terms.

  • src/wp-admin/includes/nav-menu.php

    diff --git a/src/wp-admin/includes/nav-menu.php b/src/wp-admin/includes/nav-menu.php
    index 64dda1db61..3cd7f53459 100644
    a b function _wp_ajax_menu_quick_search( $request = array() ) { 
    113113                                        'taxonomy'   => $matches[2],
    114114                                        'name__like' => $query,
    115115                                        'number'     => 10,
     116                                        'hide_empty' => false,
    116117                                )
    117118                        );
    118119                        if ( empty( $terms ) || is_wp_error( $terms ) ) {
  • src/wp-includes/class-wp-customize-nav-menus.php

    diff --git a/src/wp-includes/class-wp-customize-nav-menus.php b/src/wp-includes/class-wp-customize-nav-menus.php
    index 1b44b1453d..8abb6a9b5d 100644
    a b final class WP_Customize_Nav_Menus { 
    369369                                'taxonomies' => $taxonomies,
    370370                                'name__like' => $args['s'],
    371371                                'number'     => 20,
     372                                'hide_empty' => false,
    372373                                'offset'     => 20 * ( $args['pagenum'] - 1 ),
    373374                        )
    374375                );
  • tests/phpunit/tests/customize/nav-menus.php

    diff --git a/tests/phpunit/tests/customize/nav-menus.php b/tests/phpunit/tests/customize/nav-menus.php
    index 1de6047097..5fb6eda1bb 100644
    a b class Test_WP_Customize_Nav_Menus extends WP_UnitTestCase { 
    371371                                's'       => 'cat',
    372372                        )
    373373                );
    374                 $this->assertEquals( 1, count( $results ) );
     374                $this->assertCount( 2, $results ); // Category terms Cats Drool and Uncategorized.
    375375                $count = $this->filter_count_customize_nav_menu_searched_items;
    376376                add_filter( 'customize_nav_menu_searched_items', array( $this, 'filter_search' ), 10, 2 );
    377377                $results = $menus->search_available_items_query(
    class Test_WP_Customize_Nav_Menus extends WP_UnitTestCase { 
    382382                );
    383383                $this->assertEquals( $count + 1, $this->filter_count_customize_nav_menu_searched_items );
    384384                $this->assertInternalType( 'array', $results );
    385                 $this->assertEquals( 2, count( $results ) );
     385                $this->assertCount( 3, $results );
    386386                remove_filter( 'customize_nav_menu_searched_items', array( $this, 'filter_search' ), 10 );
    387387
    388388                // Test home.
    class Test_WP_Customize_Nav_Menus extends WP_UnitTestCase { 
    398398                $this->assertEquals( 'custom', $results[0]['type'] );
    399399        }
    400400
     401        /*
     402         * Tests that the search_available_items_query method should return term items
     403         * not assigned to any posts.
     404         *
     405         * @ticket 45298
     406         */
     407        public function test_search_available_items_query_should_return_unassigned_term_items() {
     408                        $menus = new WP_Customize_Nav_Menus( $this->wp_customize );
     409
     410                        register_taxonomy( 'wptests_tax', 'post',
     411                                        array(
     412                                                        'labels' => array(
     413                                                                        'name' => 'Tests Taxonomy',
     414                                                        ),
     415                                        )
     416                        );
     417
     418                        $term_id = $this->factory->term->create(
     419                                        array(
     420                                                        'taxonomy' => 'wptests_tax',
     421                                                        'name'   => 'foobar',
     422                                        )
     423                        );
     424
     425                        // Expected menu item array.
     426                        $expected = array(
     427                                        'title'   => 'foobar',
     428                                        'id'             => "term-{$term_id}",
     429                                        'type'     => 'taxonomy',
     430                                        'type_label' => 'Tests Taxonomy',
     431                                        'object'         => 'wptests_tax',
     432                                        'object_id'  => intval( $term_id ),
     433                                        'url'           => get_term_link( intval( $term_id ), '' ),
     434                        );
     435
     436                        $results = $menus->search_available_items_query(
     437                                        array(
     438                                                        'pagenum' => 1,
     439                                                        's'        => 'foo',
     440                                        )
     441                        );
     442
     443                        $this->assertEqualSets( $expected, $results[0] );
     444        }
     445
    401446        /**
    402447         * Count for number of times customize_nav_menu_searched_items filtered.
    403448         *
  • tests/phpunit/tests/menu/wpAjaxMenuQuickSearch.php

    diff --git a/tests/phpunit/tests/menu/wpAjaxMenuQuickSearch.php b/tests/phpunit/tests/menu/wpAjaxMenuQuickSearch.php
    index 55febb9e8d..c8067e9d5d 100644
    a b class Tests_Menu_WpAjaxMenuQuickSeach extends WP_UnitTestCase { 
    121121                $this->assertCount( 1, $results );
    122122        }
    123123}
     124
     125/**
     126 * Test that search displays terms that are not assigned to any posts.
     127 *
     128 * @ticket 45298
     129 */
     130public function test_search_should_return_unassigned_term_items() {
     131                register_taxonomy( 'wptests_tax', 'post' );
     132
     133                $term_id = $this->factory->term->create(
     134                                array(
     135                                                'taxonomy' => 'wptests_tax',
     136                                                'name'   => 'foobar',
     137                                )
     138                );
     139
     140                $request = array(
     141                                'type' => 'quick-search-taxonomy-wptests_tax',
     142                                'q'     => 'foobar',
     143                );
     144                $output  = get_echo( '_wp_ajax_menu_quick_search', array( $request ) );
     145
     146                $this->assertNotEmpty( $output );
     147                $results = explode( "\n", trim( $output ) );
     148                $this->assertCount( 1, $results );
     149}