WordPress.org

Make WordPress Core

Ticket #19744: 19744.2.diff

File 19744.2.diff, 3.5 KB (added by wonderboymusic, 8 years ago)
  • src/wp-includes/class-wp.php

     
    238238
    239239                $this->public_query_vars = apply_filters('query_vars', $this->public_query_vars);
    240240
    241                 foreach ( $GLOBALS['wp_post_types'] as $post_type => $t )
     241                foreach ( get_post_types( array(), 'objects' ) as $post_type => $t )
    242242                        if ( $t->query_var )
    243243                                $post_type_query_vars[$t->query_var] = $post_type;
    244244
     
    271271                }
    272272
    273273                // Convert urldecoded spaces back into +
    274                 foreach ( $GLOBALS['wp_taxonomies'] as $taxonomy => $t )
     274                foreach ( get_taxonomies( array() , 'objects' ) as $taxonomy => $t )
    275275                        if ( $t->query_var && isset( $this->query_vars[$t->query_var] ) )
    276276                                $this->query_vars[$t->query_var] = str_replace( ' ', '+', $this->query_vars[$t->query_var] );
    277277
  • src/wp-includes/query.php

     
    17351735                        );
    17361736                }
    17371737
    1738                 foreach ( $GLOBALS['wp_taxonomies'] as $taxonomy => $t ) {
     1738                foreach ( get_taxonomies( array() , 'objects' ) as $taxonomy => $t ) {
    17391739                        if ( 'post_tag' == $taxonomy )
    17401740                                continue;       // Handled further down in the $q['tag'] block
    17411741
  • src/wp-includes/rewrite.php

     
    338338        $url = trim($url, '/');
    339339
    340340        $request = $url;
     341        $post_type_query_vars = array();
    341342
     343        foreach ( get_post_types( array() , 'objects' ) as $post_type => $t ) {
     344                if ( ! empty( $t->query_var ) )
     345                        $post_type_query_vars[ $t->query_var ] = $post_type;
     346        }
     347
    342348        // Look for matches.
    343349        $request_match = $request;
    344350        foreach ( (array)$rewrite as $match => $query) {
     
    365371
    366372                        // Filter out non-public query vars
    367373                        global $wp;
    368                         parse_str($query, $query_vars);
     374                        parse_str( $query, $query_vars );
    369375                        $query = array();
    370376                        foreach ( (array) $query_vars as $key => $value ) {
    371                                 if ( in_array($key, $wp->public_query_vars) )
     377                                if ( in_array( $key, $wp->public_query_vars ) ){
    372378                                        $query[$key] = $value;
     379                                        if ( isset( $post_type_query_vars[$key] ) ) {
     380                                                $query['post_type'] = $post_type_query_vars[$key];
     381                                                $query['name'] = $value;
     382                                        }
     383                                }
    373384                        }
    374385
    375386                        // Do the query
    376                         $query = new WP_Query($query);
    377                         if ( !empty($query->posts) && $query->is_singular )
     387                        $query = new WP_Query( $query );
     388                        if ( ! empty( $query->posts ) && $query->is_singular )
    378389                                return $query->post->ID;
    379390                        else
    380391                                return 0;
  • tests/phpunit/tests/rewrite.php

     
    3232                $this->assertEquals( $id, url_to_postid( get_permalink( $id ) ) );
    3333        }
    3434
     35        function test_url_to_postid_custom_post_type() {
     36                delete_option( 'rewrite_rules' );
     37               
     38                $post_type = rand_str( 12 );
     39                register_post_type( $post_type, array( 'public' => true ) );
     40               
     41                $id = $this->factory->post->create( array( 'post_type' => $post_type ) );
     42                $this->assertEquals( $id, url_to_postid( get_permalink( $id ) ) );             
     43               
     44                _unregister_post_type( $post_type );           
     45        }
     46       
    3547        function test_url_to_postid_hierarchical() {
    3648
    3749                $parent_id = $this->factory->post->create( array( 'post_title' => 'Parent', 'post_type' => 'page' ) );