WordPress.org

Make WordPress Core

Ticket #2123: 404 non existant posts, authors and cats.diff

File 404 non existant posts, authors and cats.diff, 1.8 KB (added by majelbstoat, 10 years ago)

404 when an invalid postname / category / authorname is supplied

  • classes.php

     
    7474 
    7575        // Parse a query string and set query type booleans. 
    7676        function parse_query ($query) { 
     77                global $wpdb; 
    7778                if ( !empty($query) || !isset($this->query) ) { 
    7879                        $this->init(); 
    7980                        parse_str($query, $qv); 
     
    102103                        $this->is_single = true; 
    103104                        $this->is_attachment = true; 
    104105                } elseif ('' != $qv['name']) { 
    105                         $this->is_single = true; 
     106                                if ($qv['name'] == $wpdb->get_var("SELECT post_name FROM $wpdb->posts WHERE post_name = '" . $qv['name'] . "' LIMIT 1")) { 
     107                                        $this->is_single = true;                         
     108                                } 
     109                                else { 
     110                                        $this->is_404 = true; 
     111                                        $this->is_single = false; 
     112                                } 
    106113                } elseif ( $qv['p'] ) { 
    107114                        $this->is_single = true; 
    108115                } elseif (('' != $qv['hour']) && ('' != $qv['minute']) &&('' != $qv['second']) && ('' != $qv['year']) && ('' != $qv['monthnum']) && ('' != $qv['day'])) { 
     
    189196                        } 
    190197 
    191198                        if ('' != $qv['category_name']) { 
    192                                 $this->is_category = true; 
     199                                if ($qv['category_name'] == $wpdb->get_var("SELECT category_nicename FROM $wpdb->categories WHERE category_nicename = '" . $qv['category_name'] . "' LIMIT 1")) { 
     200                                        $this->is_category = true;                       
     201                                } 
     202                                else { 
     203                                        $this->is_404 = true; 
     204                                        $this->is_category = false; 
     205                                } 
    193206                        } 
    194207             
    195208                        if ((empty($qv['author'])) || ($qv['author'] == '0')) { 
    196209                                $this->is_author = false; 
    197210                        } else { 
    198                                 $this->is_author = true; 
     211                                if ($qv['author_name'] == $wpdb->get_var("SELECT user_nicename FROM $wpdb->users WHERE user_nicename = '" . $qv['user_nicename'] . "' LIMIT 1")) { 
     212                                        $this->is_author = true;                         
     213                                } 
     214                                else { 
     215                                        $this->is_404 = true; 
     216                                        $this->is_author = false; 
     217                                } 
    199218                        } 
    200219 
    201220                        if ('' != $qv['author_name']) {