Make WordPress Core

Ticket #1964: fix-sameslug-pages.2.diff

File fix-sameslug-pages.2.diff, 3.6 KB (added by davidhouse, 19 years ago)
  • wp-includes/template-functions-post.php

     
    283283                                $page_list = array_merge($page_list, $children);
    284284                }
    285285        }
    286 
    287286        return $page_list;
    288287}
    289288
  • wp-includes/classes.php

     
    257257                // First let's clear some variables
    258258                $whichcat = '';
    259259                $whichauthor = '';
     260                $whichpage = '';
    260261                $result = '';
    261262                $where = '';
    262263                $limits = '';
     
    350351                        $q['name'] = sanitize_title($q['name']);
    351352                        $where .= " AND post_name = '" . $q['name'] . "'";
    352353                } else if ('' != $q['pagename']) {
    353                         $q['pagename'] = sanitize_title(basename(str_replace('%2F', '/', urlencode($q['pagename']))));
    354354                        $q['name'] = $q['pagename'];
    355                         $where .= " AND post_name = '" . $q['pagename'] . "'";
    356355                } elseif ('' != $q['attachment']) {
    357356                        $q['attachment'] = sanitize_title($q['attachment']);
    358357                        $q['name'] = $q['attachment'];
     
    511510                        $q['author'] = $wpdb->get_var("SELECT ID FROM $wpdb->users WHERE user_nicename='".$q['author_name']."'");
    512511                        $whichauthor .= ' AND (post_author = '.intval($q['author']).')';
    513512                }
     513               
     514                //Page stuff
     515                if ($this->is_page) {
     516                        $page_paths = '/' . trim(urldecode($q['pagename']), '/');
     517                        $q['pagename'] = sanitize_title(basename($page_paths));
     518                        $page_paths = explode('/', $page_paths);
     519                        foreach($page_paths as $pathdir)
     520                                $page_path .= ($pathdir!=''?'/':'') . sanitize_title($pathdir);
     521                               
     522                        $all_page_ids = get_all_page_ids();
     523                        $reqpage = 0;                   
     524                        foreach ( $all_page_ids as $page_id ) {
     525                                $page = get_page($page_id);
     526                                if ( $page->fullpath == $page_path ) {
     527                                        $reqpage = $page_id;
     528                                        break;
     529                                }
     530                        }
     531                       
     532                        $whichpage = " AND (ID = '$reqpage')";
     533                }
     534               
     535                $where .= $search.$whichcat.$whichauthor.$whichpage;
    514536
    515                 $where .= $search.$whichcat.$whichauthor;
    516 
    517537                if ((empty($q['order'])) || ((strtoupper($q['order']) != 'ASC') && (strtoupper($q['order']) != 'DESC'))) {
    518538                        $q['order']='DESC';
    519539                }
  • wp-includes/functions.php

     
    585585        }
    586586}
    587587
     588function set_page_path($page) {
     589        $page->fullpath = '/' . $page->post_name;
     590        $path = $page->fullpath;
     591        $curpage = $page;
     592        while ($curpage->post_parent != 0) {
     593                $curpage = get_page($curpage->post_parent);
     594                $path = '/' . $curpage->post_name . $path;
     595        }
     596       
     597        $page->fullpath = $path;
     598
     599        return $page;
     600}
     601
    588602// Retrieves page data given a page ID or page object.
    589603// Handles page caching.
    590604function &get_page(&$page, $output = OBJECT) {
     
    612626                        wp_cache_add($_page->ID, $_page, 'pages');
    613627                }
    614628        }
     629       
     630        if (!isset($_page->fullpath)) {
     631                $_page = set_page_path($_page);
     632                wp_cache_replace($_page->cat_ID, $_page, 'pages');
     633        }
    615634
    616635        if ( $output == OBJECT ) {
    617636                return $_page;
     
    720739        return $cat_ids;
    721740}
    722741
     742function get_all_page_ids() {
     743        global $wpdb;
     744       
     745        if ( ! $page_ids = wp_cache_get('all_page_ids', 'posts') ) {
     746                $page_ids = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_status='static'");
     747                wp_cache_add('all_page_ids', $page_ids, 'pages');
     748        }
     749       
     750        return $page_ids;
     751}
     752
    723753function gzip_compression() {
    724754        if ( strstr($_SERVER['PHP_SELF'], 'wp-admin') ) return false;
    725755        if ( !get_settings('gzipcompression') ) return false;