WordPress.org

Make WordPress Core

Ticket #16687: polish.16687.diff

File polish.16687.diff, 5.1 KB (added by scribu, 9 years ago)
  • wp-includes/class-wp.php

    diff --git a/wp-includes/class-wp.php b/wp-includes/class-wp.php
    index a1bc2f1..5fad51f 100644
    a b class WP { 
    184184                        $this->request = $request;
    185185
    186186                        // Look for matches.
    187                         $request_match = $request;
    188                         if ( empty( $req_uri ) ) {
    189                                 // An empty request could only match against ^$ regex
    190                                 if ( isset( $rewrite['$'] ) ) {
    191                                         $this->matched_rule = '$';
    192                                         $query = $rewrite['$'];
    193                                         $matches = array('');
    194                                 }
    195                         } else if ( $req_uri != 'wp-app.php' ) {
    196                                 foreach ( (array) $rewrite as $match => $query ) {
    197                                         // If the requesting file is the anchor of the match, prepend it to the path info.
    198                                         if ( ! empty($req_uri) && strpos($match, $req_uri) === 0 && $req_uri != $request )
    199                                                 $request_match = $req_uri . '/' . $request;
    200 
    201                                         if ( preg_match("#^$match#", $request_match, $matches) ||
    202                                                 preg_match("#^$match#", urldecode($request_match), $matches) ) {
    203 
    204                                                 if ( $wp_rewrite->use_verbose_page_rules && preg_match( '/pagename=\$([^&\[]+)\[([0-9]+)\]/', $query, $varmatch ) ) {
    205                                                         // this is a verbose page match, lets check to be sure about it
    206                                                         if ( ! get_page_by_path( ${$varmatch[1]}[$varmatch[2]] ) )
    207                                                                 continue;
    208                                                 }
    209 
    210                                                 // Got a match.
    211                                                 $this->matched_rule = $match;
    212                                                 break;
    213                                         }
    214                                 }
    215                         }
    216 
    217                         if ( isset( $this->matched_rule ) ) {
    218                                 // Trim the query of everything up to the '?'.
    219                                 $query = preg_replace("!^.+\?!", '', $query);
    220 
    221                                 // Substitute the substring matches into the query.
    222                                 $query = addslashes(WP_MatchesMapRegex::apply($query, $matches));
     187                        $result = $wp_rewrite->find_match( $request, $req_uri, $rewrite );
    223188
    224                                 $this->matched_query = $query;
     189                        if ( $result ) {
     190                                list( $this->matched_rule, $this->matched_query ) = $result;
    225191
    226                                 // Parse the query.
    227                                 parse_str($query, $perma_query_vars);
     192                                parse_str( $this->matched_query, $perma_query_vars );
    228193
    229194                                // If we're processing a 404 request, clear the error var
    230195                                // since we found something.
  • wp-includes/rewrite.php

    diff --git a/wp-includes/rewrite.php b/wp-includes/rewrite.php
    index 4502db1..956ac4b 100644
    a b function url_to_postid($url) { 
    304304        $request = $url;
    305305
    306306        // Look for matches.
    307         $request_match = $request;
    308         foreach ( (array)$rewrite as $match => $query) {
    309 
    310                 // If the requesting file is the anchor of the match, prepend it
    311                 // to the path info.
    312                 if ( !empty($url) && ($url != $request) && (strpos($match, $url) === 0) )
    313                         $request_match = $url . '/' . $request;
    314 
    315                 if ( preg_match("!^$match!", $request_match, $matches) ) {
    316 
    317                         if ( $wp_rewrite->use_verbose_page_rules && preg_match( '/pagename=\$([^&\[]+)\[([0-9]+)\]/', $query, $varmatch ) ) {
    318                                 // this is a verbose page match, lets check to be sure about it
    319                                 if ( ! get_page_by_path( ${$varmatch[1]}[$varmatch[2]] ) )
    320                                         continue;
    321                         }
    322 
    323                         // Got a match.
    324                         // Trim the query of everything up to the '?'.
    325                         $query = preg_replace("!^.+\?!", '', $query);
    326 
    327                         // Substitute the substring matches into the query.
    328                         $query = addslashes(WP_MatchesMapRegex::apply($query, $matches));
     307        $result = $wp_rewrite->find_match( $request, $url, $rewrite );
     308        if ( $result ) {
     309                        list( $match, $query ) = $result;
    329310
    330311                        // Filter out non-public query vars
    331312                        global $wp;
    function url_to_postid($url) { 
    342323                                return $query->post->ID;
    343324                        else
    344325                                return 0;
    345                 }
    346326        }
    347327        return 0;
    348328}
    class WP_Rewrite { 
    19691949        function __construct() {
    19701950                $this->init();
    19711951        }
     1952
     1953        /**
     1954         * Go through a list of rewrite rules and find a match
     1955         *
     1956         * @since 3.3.0
     1957         * @access private
     1958         */
     1959        function find_match( $request, $req_uri, $rewrite ) {
     1960                $found = false;
     1961
     1962                $request_match = $request;
     1963                if ( empty( $req_uri ) ) {
     1964                        // An empty request could only match against ^$ regex
     1965                        if ( isset( $rewrite['$'] ) ) {
     1966                                $match = '$';
     1967                                $query = $rewrite['$'];
     1968                                $matches = array('');
     1969                                $found = true;
     1970                        }
     1971                } else if ( $req_uri != 'wp-app.php' ) {
     1972                        foreach ( (array) $rewrite as $match => $query ) {
     1973                                // If the requesting file is the anchor of the match, prepend it to the path info.
     1974                                if ( ! empty($req_uri) && strpos($match, $req_uri) === 0 && $req_uri != $request )
     1975                                        $request_match = $req_uri . '/' . $request;
     1976
     1977                                if ( preg_match("#^$match#", $request_match, $matches) ||
     1978                                         preg_match("#^$match#", urldecode($request_match), $matches) ) {
     1979
     1980                                                if ( $this->use_verbose_page_rules == true && preg_match( '/pagename=\$matches\[([0-9]+)\]/', $query, $varmatch ) ) {
     1981                                                        // this is a verbose page match, lets check to be sure about it
     1982                                                        if ( ! get_page_by_path( $matches[ $varmatch[1] ] ) )
     1983                                                                continue;
     1984                                                }
     1985
     1986                                                // Got a match.
     1987                                                $found = true;
     1988                                                break;
     1989                                }
     1990                        }
     1991                }
     1992
     1993                if ( $found ) {
     1994                        // Trim the query of everything up to the '?'.
     1995                        $query = preg_replace("!^.+\?!", '', $query);
     1996
     1997                        // Substitute the substring matches into the query.
     1998                        $query = addslashes(WP_MatchesMapRegex::apply($query, $matches));
     1999
     2000                        return array( $match, $query );
     2001                }
     2002
     2003                return false;
     2004        }
    19722005}
    19732006
    19742007?>