WordPress.org

Make WordPress Core

Ticket #21949: 21949.diff

File 21949.diff, 1.8 KB (added by nacin, 19 months ago)
  • wp-includes/class-wp.php

     
    279279                        } 
    280280                } 
    281281 
    282                 // Convert urldecoded spaces back into + 
    283                 foreach ( $GLOBALS['wp_taxonomies'] as $taxonomy => $t ) 
    284                         if ( $t->query_var && isset( $this->query_vars[$t->query_var] ) ) 
    285                                 $this->query_vars[$t->query_var] = str_replace( ' ', '+', $this->query_vars[$t->query_var] ); 
     282                foreach ( get_taxonomies( array(), 'objects' ) as $taxonomy => $t ) { 
     283                        if ( $t->query_var && isset( $this->query_vars[ $t->query_var ] ) ) { 
     284                                // Don't allow non-public taxonomies to be queried outside the admin 
     285                                if ( ! $t->public && ! is_admin() ) 
     286                                        unset( $this->query_vars[ $t->query_var ] ); 
     287                                // Convert urldecoded spaces back into + 
     288                                $this->query_vars[ $t->query_var ] = str_replace( ' ', '+', $this->query_vars[ $t->query_var ] ); 
     289                        } 
     290                } 
    286291 
     292                // Don't allow non-public taxonomies to be queried outside the admin 
     293                if ( isset( $this->query_vars['taxonomy'] ) && ! is_admin() ) { 
     294                        $queryable_taxonomies = get_taxonomies( array( 'public' => true ) ); 
     295                        if ( is_array( $this->query_vars['taxonomy'] ) ) { 
     296                                $this->query_vars['taxonomy'] = array_intersect( $this->query_vars['taxonomy'], $queryiable_taxonomies ); 
     297                                if ( empty( $this->query_vars['taxonomy'] ) ) 
     298                                        unset( $this->query_vars['taxonomy'], $this->query_vars['term'] ); 
     299                        } elseif ( ! in_array( $this->query_vars['taxonomy'], $queryable_taxonomies ) ) { 
     300                                unset( $this->query_vars['taxonomy'], $this->query_vars['term'] ); 
     301                        } 
     302                } 
     303 
    287304                // Limit publicly queried post_types to those that are publicly_queryable 
    288305                if ( isset( $this->query_vars['post_type']) ) { 
    289306                        $queryable_post_types = get_post_types( array('publicly_queryable' => true) );