Make WordPress Core

Changeset 3356


Ignore:
Timestamp:
12/24/2005 04:26:55 PM (21 years ago)
Author:
ryan
Message:

Fix page permalink 404 when pages are reordered. Props David House. fixes #2071

Location:
trunk/wp-includes
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/classes.php

    r3327 r3356  
    371371                               
    372372                        $all_page_ids = get_all_page_ids();
    373                         $reqpage = 0;                   
     373                        $reqpage = 0;
    374374                        foreach ( $all_page_ids as $page_id ) {
    375375                                $page = get_page($page_id);
  • trunk/wp-includes/functions-post.php

    r3354 r3356  
    770770}
    771771
     772//fetches the pages returned as a FLAT list, but arranged in order of their hierarchy, i.e., child parents
     773//immediately follow their parents
     774function get_page_hierarchy($posts, $parent = 0) {
     775        $result = array ( );
     776        if ($posts) { foreach ($posts as $post) {
     777                if ($post->post_parent == $parent) {
     778                        $result[$post->ID] = $post->post_name;
     779                        $children = get_page_hierarchy($posts, $post->ID);
     780                        $result += $children; //append $children to $result
     781                }
     782        } }
     783        return $result;
     784}
     785
    772786function generate_page_rewrite_rules() {
    773787        global $wpdb;
    774         $posts = $wpdb->get_results("SELECT ID, post_name FROM $wpdb->posts WHERE post_status = 'static' ORDER BY post_parent DESC");
     788       
     789        //get pages in order of hierarchy, i.e. children after parents
     790        $posts = get_page_hierarchy($wpdb->get_results("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_status = 'static'"));
     791        //now reverse it, because we need parents after children for rewrite rules to work properly
     792        $posts = array_reverse($posts, true);
    775793
    776794        $page_rewrite_rules = array();
    777795       
    778796        if ($posts) {
    779                 foreach ($posts as $post) {
     797               
     798                foreach ($posts as $id => $post) {
    780799                        // URI => page name
    781                         $uri = get_page_uri($post->ID);
     800                        $uri = get_page_uri($id);
    782801                       
    783                         $page_rewrite_rules[$uri] = $post->post_name;
     802                        $page_rewrite_rules[$uri] = $post;
    784803                }
    785804               
Note: See TracChangeset for help on using the changeset viewer.