Changeset 18541 for trunk/wp-includes/post.php
- Timestamp:
- 08/12/2011 01:55:08 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-includes/post.php
r18513 r18541 3147 3147 function get_page_by_path($page_path, $output = OBJECT, $post_type = 'page') { 3148 3148 global $wpdb; 3149 $null = null; 3149 3150 3150 $page_path = rawurlencode(urldecode($page_path)); 3151 3151 $page_path = str_replace('%2F', '/', $page_path); 3152 3152 $page_path = str_replace('%20', ' ', $page_path); 3153 $page_paths = '/' . trim($page_path, '/'); 3154 $leaf_path = sanitize_title(basename($page_paths)); 3155 $page_paths = explode('/', $page_paths); 3156 $full_path = ''; 3157 foreach ( (array) $page_paths as $pathdir ) 3158 $full_path .= ( $pathdir != '' ? '/' : '' ) . sanitize_title($pathdir); 3159 3160 $pages = $wpdb->get_results( $wpdb->prepare( "SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_name = %s AND (post_type = %s OR post_type = 'attachment')", $leaf_path, $post_type )); 3161 3162 if ( empty($pages) ) 3163 return $null; 3164 3153 $parts = explode( '/', trim( $page_path, '/' ) ); 3154 $parts = array_map( 'esc_sql', $parts ); 3155 $parts = array_map( 'sanitize_title', $parts ); 3156 3157 $in_string = "'". implode( "','", $parts ) . "'"; 3158 $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 ); 3159 3160 $revparts = array_reverse( $parts ); 3161 3162 $foundid = 0; 3165 3163 foreach ( $pages as $page ) { 3166 $path = '/' . $leaf_path; 3167 $curpage = $page; 3168 while ( $curpage->post_parent != 0 ) { 3169 $post_parent = $curpage->post_parent; 3170 $curpage = wp_cache_get( $post_parent, 'posts' ); 3171 if ( false === $curpage ) 3172 $curpage = $wpdb->get_row( $wpdb->prepare( "SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE ID = %d and post_type = %s", $post_parent, $post_type ) ); 3173 $path = '/' . $curpage->post_name . $path; 3164 if ( $page->post_name == $revparts[0] ) { 3165 $count = 0; 3166 if ( $page->post_parent != 0 ) { 3167 if ( null === ( $parent_page = $pages[ $page->post_parent ] ) ) 3168 continue; 3169 3170 while ( $parent_page->ID != 0 ) { 3171 $count++; 3172 if ( $parent_page->post_name != $revparts[ $count ] ) 3173 break; 3174 $parent_page = $pages[ $parent_page->post_parent ]; 3175 } 3176 3177 if ( $parent_page->ID == 0 && $count+1 == count($revparts) ) { 3178 $foundid = $page->ID; 3179 break; 3180 } 3181 } else if ( count($revparts) == 1 ) { 3182 $foundid = $page->ID; 3183 break; 3184 } 3174 3185 } 3175 3176 if ( $path == $full_path ) 3177 return get_page($page->ID, $output, $post_type);3178 }3179 3180 return $null;3186 } 3187 3188 if ( $foundid ) 3189 return get_page($foundid, $output, $post_type); 3190 3191 return null; 3181 3192 } 3182 3193
Note: See TracChangeset
for help on using the changeset viewer.