Make WordPress Core


Ignore:
Timestamp:
10/02/2013 07:41:19 PM (13 years ago)
Author:
wonderboymusic
Message:

Make url_to_postid() work for custom post type URLs. Use get_post_types() and get_taxonomies() instead of directly accessing globals. Adds unit test.

Props faishal, for the globals fix.
Fixes #19744.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/rewrite.php

    r25464 r25659  
    339339
    340340        $request = $url;
     341        $post_type_query_vars = array();
     342
     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        }
    341347
    342348        // Look for matches.
    … …  
    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
Note: See TracChangeset for help on using the changeset viewer.