WordPress.org

Make WordPress Core

Ticket #15667: 15667.3.diff

File 15667.3.diff, 4.3 KB (added by wonderboymusic, 6 years ago)
  • src/wp-includes/class-wp-walker.php

     
    225225                 * When none of the elements is top level.
    226226                 * Assume the first one must be root of the sub elements.
    227227                 */
    228                 if ( empty($top_level_elements) ) {
     228                if ( empty( $top_level_elements ) && $max_depth !== 1 ) {
    229229
    230230                        $first = array_slice( $elements, 0, 1 );
    231231                        $root = $first[0];
  • tests/phpunit/tests/post/getPages.php

     
    134134                $this->assertEquals( $inc, $exc_result );
    135135        }
    136136
     137        /*
     138         * @ticket 15667
     139         */
     140        function test_get_pages_exclude_with_children() {
     141
     142                $page_1       = $this->factory->post->create( array( 'post_type' => 'page' ) );
     143                $page_1_child = $this->factory->post->create( array( 'post_type' => 'page', 'post_parent' => $page_1 ) );
     144                $page_2       = $this->factory->post->create( array( 'post_type' => 'page' ) );
     145                $page_2_child = $this->factory->post->create( array( 'post_type' => 'page', 'post_parent' => $page_2 ) );
     146
     147                // If hierarchical is false get_pages returns the children even though the parents are excluded
     148                $pages = get_pages( 'hierarchical=0&exclude=' . implode( ',', array( $page_1, $page_2 ) ) );
     149                $this->assertEqualSets( array( $page_1_child, $page_2_child ), wp_list_pluck( $pages, 'ID' ) );
     150
     151                // If hierarchical is true get_pages doesn't return the children if the parents are excluded
     152                $pages = get_pages( 'hierarchical=1&exclude=' . implode( ',', array( $page_1, $page_2 ) ) );
     153                $this->assertEmpty( $pages );
     154
     155        }
     156
     157        /*
     158         * @ticket 15667
     159         */
     160        function test_get_pages_exclude_tree() {
     161
     162                $page_1       = $this->factory->post->create( array( 'post_type' => 'page' ) );
     163                $page_1_child = $this->factory->post->create( array( 'post_type' => 'page', 'post_parent' => $page_1 ) );
     164                $page_2       = $this->factory->post->create( array( 'post_type' => 'page' ) );
     165                $page_2_child = $this->factory->post->create( array( 'post_type' => 'page', 'post_parent' => $page_2 ) );
     166
     167                // exclude_tree always excludes the children regardless of what hierarchical is set to
     168                $pages = get_pages( 'hierarchical=0&exclude_tree=' . $page_1 );
     169                $this->assertEqualSets( array( $page_2, $page_2_child ), wp_list_pluck( $pages, 'ID' ) );
     170                $pages = get_pages( 'hierarchical=1&exclude_tree=' . $page_1 );
     171                $this->assertEqualSets( array( $page_2, $page_2_child ), wp_list_pluck( $pages, 'ID' ) );
     172
     173                // You can only pass a single ID to exclude_tree
     174                $pages = get_pages( 'exclude_tree=' . implode( ',', array( $page_1, $page_2 ) ) );
     175                $this->assertEqualSets( array( $page_2, $page_2_child ), wp_list_pluck( $pages, 'ID' ) );
     176        }
     177
    137178        /**
    138179         * @ticket 9470
    139180         */
  • tests/phpunit/tests/post/wpListPages.php

     
     1<?php
     2
     3class Tests_Post_ListPages extends WP_UnitTestCase {
     4
     5        function setUp() {
     6                parent::setUp();
     7        }
     8
     9        function test_wp_list_pages_exclude_all_parents() {
     10
     11                $page_1       = $this->factory->post->create( array( 'post_type' => 'page' ) );
     12                $page_1_child = $this->factory->post->create( array( 'post_type' => 'page', 'post_parent' => $page_1 ) );
     13                $page_2       = $this->factory->post->create( array( 'post_type' => 'page' ) );
     14                $page_2_child = $this->factory->post->create( array( 'post_type' => 'page', 'post_parent' => $page_2 ) );
     15
     16                // excluding the parents should cause wp_list_pages to return nothing
     17                $pages = wp_list_pages( 'echo=0&exclude=' . implode( ',', array( $page_1, $page_2 ) ) );
     18
     19                $this->assertEmpty( $pages );
     20
     21        }
     22
     23        function test_wp_list_pages_exclude_tree() {
     24
     25                $page_1       = $this->factory->post->create( array( 'post_type' => 'page' ) );
     26                $page_1_child = $this->factory->post->create( array( 'post_type' => 'page', 'post_parent' => $page_1 ) );
     27
     28                // excluding the parent should cause wp_list_pages to return nothing
     29                $pages = wp_list_pages( 'echo=0&exclude_tree=' . $page_1 );
     30
     31                $this->assertEmpty( $pages );
     32
     33        }
     34
     35}