WordPress.org

Make WordPress Core

Ticket #17670: 17670.5.diff

File 17670.5.diff, 2.1 KB (added by dd32, 7 years ago)
  • wp-includes/post.php

     
    31553155        $parts = array_map( 'esc_sql', $parts );
    31563156        $parts = array_map( 'sanitize_title', $parts );
    31573157
     3158        if ( empty($parts) )
     3159                return null;
     3160
    31583161        $in_string = "'". implode( "','", $parts ) . "'";
    31593162        $pages = $wpdb->get_results( $wpdb->prepare( "SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_name IN ({$in_string}) AND (post_type = %s OR post_type = 'attachment')", $post_type ), OBJECT_K );
    31603163
     3164        if ( empty($pages) )
     3165                return null;
     3166
    31613167        $revparts = array_reverse( $parts );
     3168        $revparts_count = count($revparts);
    31623169
    3163         $foundid = 0;
    3164         foreach ( (array) $pages as $page ) {
    3165                 if ( $page->post_name == $revparts[0] ) {
     3170        if ( 1 == $revparts_count ) {
     3171                foreach ( $pages as $page ) {
     3172                        if ( $page->post_name == $revparts[0] )
     3173                                return get_page($page->ID, $output, $post_type);
     3174                }
     3175                return null;
     3176        }
     3177
     3178        foreach ( $pages as $page ) {
     3179                if ( $page->post_name == $revparts[0] && $page->post_parent !=  0) {
     3180                        $cur_page = $page;
    31663181                        $count = 0;
    3167                         if ( $page->post_parent != 0 ) {
    3168                                 if ( null === ( $parent_page = $pages[ $page->post_parent ] ) )
    3169                                         continue;
     3182                        while ( isset($pages[ $cur_page->post_parent ]) ) {
     3183                                if ( $cur_page->post_name != $revparts[ $count ] )
     3184                                        continue 2; // Continue next foreach()
     3185                                $count++;
     3186                                $cur_page = $pages[ $cur_page->post_parent ];
     3187                        }
    31703188
    3171                                 while ( $parent_page->ID != 0 ) {
    3172                                         $count++;
    3173                                         if ( $parent_page->post_name != $revparts[ $count ] )
    3174                                                 break;
    3175                                         $parent_page = $pages[ $parent_page->post_parent ];
    3176                                 }
    3177 
    3178                                 if ( $parent_page->ID == 0 && $count+1 == count($revparts) ) {
    3179                                         $foundid = $page->ID;
    3180                                         break;
    3181                                 }
    3182                         } else if ( count($revparts) == 1 ) {
    3183                                 $foundid = $page->ID;
    3184                                 break;
    3185                         }
     3189                        if ( $count+1 == $revparts_count && $cur_page->post_name == $revparts[$count] )
     3190                                return get_page($page->ID, $output, $post_type);
    31863191                }
    31873192        }
    31883193
    3189         if ( $foundid )
    3190                 return get_page($foundid, $output, $post_type);
    3191 
    31923194        return null;
    31933195}
    31943196