Make WordPress Core

Changeset 36006


Ignore:
Timestamp:
12/18/2015 06:13:58 PM (11 years ago)
Author:
boonebgorges
Message:

Ensure that wp_list_categories() supports comma-separated lists for 'exclude' and 'exclude_tree'.

[34696] introduced a regression whereby comma-separated values for 'exclude'
and 'exclude_tree' would be handled improperly when merging the two parameters,
resulting in category IDs being incorrectly dropped from the combined array.

Merges [36005] to the 4.4 branch.

Props gblsm, hnle.
Fixes #35156.

Location:
branches/4.4
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/4.4

  • branches/4.4/src/wp-includes/category-template.php

    r35851 r36006  
    551551
    552552                if ( $r['exclude_tree'] ) {
    553                         $exclude_tree = array_merge( $exclude_tree, (array) $r['exclude_tree'] );
     553                        $exclude_tree = array_merge( $exclude_tree, wp_parse_id_list( $r['exclude_tree'] ) );
    554554                }
    555555
    556556                if ( $r['exclude'] ) {
    557                         $exclude_tree = array_merge( $exclude_tree, (array) $r['exclude'] );
     557                        $exclude_tree = array_merge( $exclude_tree, wp_parse_id_list( $r['exclude'] ) );
    558558                }
    559559
  • branches/4.4/tests/phpunit/tests/category/wpListCategories.php

    r35242 r36006  
    308308                $this->assertNotContains( '<li class="cat-item cat-item-' . $child2 . '">', $actual );
    309309        }
     310
     311        /**
     312         * @ticket 35156
     313         */
     314        public function test_comma_separated_exclude_tree_should_be_merged_with_exclude() {
     315                $c = self::factory()->category->create();
     316                $parent = self::factory()->category->create( array( 'name' => 'Parent', 'slug' => 'parent' ) );
     317                $child = self::factory()->category->create( array( 'name' => 'Child', 'slug' => 'child', 'parent' => $parent ) );
     318                $parent2 = self::factory()->category->create( array( 'name' => 'Parent', 'slug' => 'parent2' ) );
     319                $child2 = self::factory()->category->create( array( 'name' => 'Child', 'slug' => 'child2', 'parent' => $parent2 ) );
     320                $parent3 = self::factory()->category->create( array( 'name' => 'Parent', 'slug' => 'parent3' ) );
     321                $child3 = self::factory()->category->create( array( 'name' => 'Child', 'slug' => 'child3', 'parent' => $parent3 ) );
     322                $parent4 = self::factory()->category->create( array( 'name' => 'Parent', 'slug' => 'parent4' ) );
     323                $child4 = self::factory()->category->create( array( 'name' => 'Child', 'slug' => 'child4', 'parent' => $parent4 ) );
     324
     325
     326                $args = array( 'echo' => 0, 'hide_empty' => 0, 'exclude_tree' => $parent );
     327
     328                $actual = wp_list_categories( array(
     329                        'echo' => 0,
     330                        'hide_empty' => 0,
     331                        'exclude' => "$parent,$parent2",
     332                        'exclude_tree' => "$parent3,$parent4",
     333                ) );
     334
     335                $this->assertContains( '<li class="cat-item cat-item-' . $c . '">', $actual );
     336
     337                $this->assertNotContains( '<li class="cat-item cat-item-' . $parent . '">', $actual );
     338                $this->assertNotContains( '<li class="cat-item cat-item-' . $parent2 . '">', $actual );
     339                $this->assertNotContains( '<li class="cat-item cat-item-' . $child . '">', $actual );
     340                $this->assertNotContains( '<li class="cat-item cat-item-' . $child2 . '">', $actual );
     341
     342                $this->assertNotContains( '<li class="cat-item cat-item-' . $parent3 . '">', $actual );
     343                $this->assertNotContains( '<li class="cat-item cat-item-' . $parent4 . '">', $actual );
     344                $this->assertNotContains( '<li class="cat-item cat-item-' . $child3 . '">', $actual );
     345                $this->assertNotContains( '<li class="cat-item cat-item-' . $child4 . '">', $actual );
     346        }
     347
     348        /**
     349         * @ticket 35156
     350         */
     351        public function test_array_exclude_tree_should_be_merged_with_exclude() {
     352                $c = self::factory()->category->create();
     353                $parent = self::factory()->category->create( array( 'name' => 'Parent', 'slug' => 'parent' ) );
     354                $child = self::factory()->category->create( array( 'name' => 'Child', 'slug' => 'child', 'parent' => $parent ) );
     355                $parent2 = self::factory()->category->create( array( 'name' => 'Parent', 'slug' => 'parent2' ) );
     356                $child2 = self::factory()->category->create( array( 'name' => 'Child', 'slug' => 'child2', 'parent' => $parent2 ) );
     357                $parent3 = self::factory()->category->create( array( 'name' => 'Parent', 'slug' => 'parent3' ) );
     358                $child3 = self::factory()->category->create( array( 'name' => 'Child', 'slug' => 'child3', 'parent' => $parent3 ) );
     359                $parent4 = self::factory()->category->create( array( 'name' => 'Parent', 'slug' => 'parent4' ) );
     360                $child4 = self::factory()->category->create( array( 'name' => 'Child', 'slug' => 'child4', 'parent' => $parent4 ) );
     361
     362
     363                $args = array( 'echo' => 0, 'hide_empty' => 0, 'exclude_tree' => $parent );
     364
     365                $actual = wp_list_categories( array(
     366                        'echo' => 0,
     367                        'hide_empty' => 0,
     368                        'exclude' => array( $parent, $parent2 ),
     369                        'exclude_tree' => array( $parent3, $parent4 ),
     370                ) );
     371
     372                $this->assertContains( '<li class="cat-item cat-item-' . $c . '">', $actual );
     373
     374                $this->assertNotContains( '<li class="cat-item cat-item-' . $parent . '">', $actual );
     375                $this->assertNotContains( '<li class="cat-item cat-item-' . $parent2 . '">', $actual );
     376                $this->assertNotContains( '<li class="cat-item cat-item-' . $child . '">', $actual );
     377                $this->assertNotContains( '<li class="cat-item cat-item-' . $child2 . '">', $actual );
     378
     379                $this->assertNotContains( '<li class="cat-item cat-item-' . $parent3 . '">', $actual );
     380                $this->assertNotContains( '<li class="cat-item cat-item-' . $parent4 . '">', $actual );
     381                $this->assertNotContains( '<li class="cat-item cat-item-' . $child3 . '">', $actual );
     382                $this->assertNotContains( '<li class="cat-item cat-item-' . $child4 . '">', $actual );
     383        }
    310384}
Note: See TracChangeset for help on using the changeset viewer.