WordPress.org

Make WordPress Core

Ticket #9470: 9470.2.diff

File 9470.2.diff, 2.7 KB (added by wonderboymusic, 18 months ago)
  • tests/phpunit/tests/post.php

     
    823823                sort( $exc_result ); 
    824824                $this->assertEquals( $inc, $exc_result ); 
    825825        } 
     826 
     827        /** 
     828         * @ticket 9470 
     829         */ 
     830        function test_get_pages_parent() { 
     831                $page_id1 = $this->factory->post->create( array( 'post_type' => 'page' ) ); 
     832                $page_id2 = $this->factory->post->create( array( 'post_type' => 'page', 'post_parent' => $page_id1 ) ); 
     833                $page_id3 = $this->factory->post->create( array( 'post_type' => 'page', 'post_parent' => $page_id2 ) ); 
     834                $page_id4 = $this->factory->post->create( array( 'post_type' => 'page', 'post_parent' => $page_id1 ) ); 
     835 
     836                $pages = get_pages( array( 'parent' => 0, 'hierarchical' => false ) ); 
     837                $this->assertEqualSets( array( $page_id1 ), wp_list_pluck( $pages, 'ID' ) ); 
     838 
     839                $pages = get_pages( array( 'parent' => $page_id1, 'hierarchical' => false ) ); 
     840                $this->assertEqualSets( array( $page_id2, $page_id4 ), wp_list_pluck( $pages, 'ID' ) ); 
     841 
     842                $pages = get_pages( array( 'parent' => array( $page_id1, $page_id2 ), 'hierarchical' => false ) ); 
     843                $this->assertEqualSets( array( $page_id2, $page_id3, $page_id4 ), wp_list_pluck( $pages, 'ID' ) ); 
     844 
     845                $pages = get_pages( array( 'parent' => 0 ) ); 
     846                $this->assertEqualSets( array( $page_id1 ), wp_list_pluck( $pages, 'ID' ) ); 
     847 
     848                $pages = get_pages( array( 'parent' => $page_id1 ) ); 
     849                $this->assertEqualSets( array( $page_id2, $page_id4 ), wp_list_pluck( $pages, 'ID' ) ); 
     850 
     851                $pages = get_pages( array( 'parent' => array( $page_id1, $page_id2 ) ) ); 
     852                $this->assertEqualSets( array( $page_id2, $page_id3, $page_id4 ), wp_list_pluck( $pages, 'ID' ) ); 
     853        } 
    826854} 
  • src/wp-includes/post.php

     
    36453645        if ( !in_array( $post_type, $hierarchical_post_types ) ) 
    36463646                return $pages; 
    36473647 
     3648        if ( $parent > 0 && empty( $child_of ) && ! isset( $args['child_of'] ) ) 
     3649                $hierarchical = false; 
     3650 
    36483651        // Make sure we have a valid post status 
    36493652        if ( !is_array( $post_status ) ) 
    36503653                $post_status = explode( ',', $post_status ); 
     
    37313734 
    37323735        } 
    37333736 
    3734         if ( $parent >= 0 ) 
     3737        if ( is_array( $parent ) ) { 
     3738                $post_parent__in = implode( ',', array_map( 'absint', (array) $parent ) ); 
     3739                if ( ! empty( $post_parent__in ) ) 
     3740                        $where .= " AND post_parent IN ($post_parent__in)"; 
     3741        } elseif ( $parent >= 0 ) { 
    37353742                $where .= $wpdb->prepare(' AND post_parent = %d ', $parent); 
     3743        } 
    37363744 
    37373745        if ( 1 == count( $post_status ) ) { 
    37383746                $where_post_type = $wpdb->prepare( "post_type = %s AND post_status = %s", $post_type, array_shift( $post_status ) );