Make WordPress Core


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/canonical.php

    r21115 r20688  
    101101
    102102        if ( ! $redirect_url ) {
    103             if ( $redirect_url = redirect_guess_404_permalink() ) {
     103            if ( $redirect_url = redirect_guess_404_permalink( $requested_url ) ) {
    104104                $redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'page', 'feed', 'p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type' ), $redirect_url );
    105105            }
     
    462462
    463463/**
    464  * Attempts to guess the correct URL based on query vars
     464 * Attempts to guess the correct URL from the current URL (that produced a 404) or
     465 * the current query variables.
    465466 *
    466467 * @since 2.3.0
    467468 * @uses $wpdb
    468469 *
     470 * @param string $current_url Optional. The URL that has 404'd.
    469471 * @return bool|string The correct URL if one is found. False on failure.
    470472 */
    471 function redirect_guess_404_permalink() {
     473function redirect_guess_404_permalink( $current_url = '' ) {
    472474    global $wpdb, $wp_rewrite;
     475
     476    if ( ! empty( $current_url ) )
     477        $parsed_url = @parse_url( $current_url );
     478
     479    // Attempt to redirect bare category slugs if the permalink structure starts
     480    // with the %category% tag.
     481    if ( isset( $parsed_url['path'] )
     482        && preg_match( '#^[^%]+%category%#', $wp_rewrite->permalink_structure )
     483        && $cat = get_category_by_path( $parsed_url['path'] )
     484    ) {
     485        if ( ! is_wp_error( $cat ) )
     486            return get_term_link( $cat );
     487    }
    473488
    474489    if ( get_query_var('name') ) {
Note: See TracChangeset for help on using the changeset viewer.