Make WordPress Core


Ignore:
Timestamp:
06/01/2020 06:47:41 PM (5 years ago)
Author:
whyisjake
Message:

Canonical: Add the ability to disable redirect_guess_404_permalink().

This also adds a few more filters to make adding redirects easier. Notably:

  1. do_redirect_guess_404_permalink
  2. pre_redirect_guess_404_permalink
  3. strict_redirect_guess_404_permalink

Fixes: #16557.
Props: msafi, nacin, simonwheatley, westi, mboynes, joostdevalk, Lex_Robinson, MikeSchinkel, haukep, paulschreiber, DrewAPicture, ravenswd, esemlabel, stevegibson12, martychc23, DrLightman, jivanpal, neonkowy, laternastudio, apedog, audrasjb, davidbaumwald, Confridin, donmhico, ryotsun.

File:
1 edited

Legend:

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

    r47855 r47878  
    836836    global $wpdb;
    837837
     838    /**
     839     * Filters whether to do redirect guess of 404 requests.
     840     *
     841     * Returning a false value from the filter will disable redirect guess 404 permalink.
     842     * and return early.
     843     *
     844     * @since 5.5.0
     845     *
     846     * @param bool     $do_redirect_guess  Whether to do redirect guess 404 permalink. Default true.
     847     */
     848    if ( false === apply_filters( 'do_redirect_guess_404_permalink', true ) ) {
     849        return false;
     850    }
     851
     852    /**
     853     * Filters whether to short-circuit redirect guess of 404 requests.
     854     *
     855     * Return a non-false value from the filter will short-circuit the handling and return early.
     856     *
     857     * @since 5.5.0
     858     *
     859     * @param bool     $pre  Whether to short-circuit redirect guess 404 permalink. Default null.
     860     */
     861    $pre = apply_filters( 'pre_redirect_guess_404_permalink', null );
     862    if ( null !== $pre ) {
     863        return $pre;
     864    }
     865
    838866    if ( get_query_var( 'name' ) ) {
    839         $where = $wpdb->prepare( 'post_name LIKE %s', $wpdb->esc_like( get_query_var( 'name' ) ) . '%' );
     867
     868        /**
     869         * Filters whether to do a strict or loose guess.
     870         *
     871         * Returning true value from the filter will guess redirect only exact post_name matches.
     872         *
     873         * @since 5.5.0
     874         *
     875         * @param bool     $strict_guess  Whether to do a strict/exact guess. Default false.
     876         */
     877        $strict_guess = apply_filters( 'strict_redirect_guess_404_permalink', false );
     878
     879        if ( $strict_guess ) {
     880            $where = $wpdb->prepare( 'post_name = %s', get_query_var( 'name' ) );
     881        } else {
     882            $where = $wpdb->prepare( 'post_name LIKE %s', $wpdb->esc_like( get_query_var( 'name' ) ) . '%' );
     883        }
    840884
    841885        // If any of post_type, year, monthnum, or day are set, use them to refine the query.
Note: See TracChangeset for help on using the changeset viewer.