redirect_guess_404_permalink

The timeline below displays how wordpress function redirect_guess_404_permalink has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.5

/**
 * Attempts to guess the correct URL for a 404 request based on query vars.
 *
 * @since 2.3.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @return string|false The correct URL if one is found. False on failure.
 */
function redirect_guess_404_permalink()
{
    global $wpdb;
    /**
     * Filters whether to attempt to guess a redirect URL for a 404 request.
     *
     * Returning a false value from the filter will disable the URL guessing
     * and return early without performing a redirect.
     *
     * @since 5.5.0
     *
     * @param bool $do_redirect_guess Whether to attempt to guess a redirect URL
     *                                for a 404 request. Default true.
     */
    if (false === apply_filters('do_redirect_guess_404_permalink', true)) {
        return false;
    }
    /**
     * Short-circuits the redirect URL guessing for 404 requests.
     *
     * Returning a non-null value from the filter will effectively short-circuit
     * the URL guessing, returning the passed value instead.
     *
     * @since 5.5.0
     *
     * @param null|string|false $pre Whether to short-circuit guessing the redirect for a 404.
     *                               Default null to continue with the URL guessing.
     */
    $pre = apply_filters('pre_redirect_guess_404_permalink', null);
    if (null !== $pre) {
        return $pre;
    }
    if (get_query_var('name')) {
        $publicly_viewable_statuses = array_filter(get_post_stati(), 'is_post_status_viewable');
        $publicly_viewable_post_types = array_filter(get_post_types(array('exclude_from_search' => false)), 'is_post_type_viewable');
        /**
         * Filters whether to perform a strict guess for a 404 redirect.
         *
         * Returning a truthy value from the filter will redirect only exact post_name matches.
         *
         * @since 5.5.0
         *
         * @param bool $strict_guess Whether to perform a strict guess. Default false (loose guess).
         */
        $strict_guess = apply_filters('strict_redirect_guess_404_permalink', false);
        if ($strict_guess) {
            $where = $wpdb->prepare('post_name = %s', get_query_var('name'));
        } else {
            $where = $wpdb->prepare('post_name LIKE %s', $wpdb->esc_like(get_query_var('name')) . '%');
        }
        // If any of post_type, year, monthnum, or day are set, use them to refine the query.
        if (get_query_var('post_type')) {
            if (is_array(get_query_var('post_type'))) {
                $post_types = array_intersect(get_query_var('post_type'), $publicly_viewable_post_types);
                if (empty($post_types)) {
                    return false;
                }
                $where .= " AND post_type IN ('" . join("', '", esc_sql(get_query_var('post_type'))) . "')";
            } else {
                if (!in_array(get_query_var('post_type'), $publicly_viewable_post_types, true)) {
                    return false;
                }
                $where .= $wpdb->prepare(' AND post_type = %s', get_query_var('post_type'));
            }
        } else {
            $where .= " AND post_type IN ('" . implode("', '", esc_sql($publicly_viewable_post_types)) . "')";
        }
        if (get_query_var('year')) {
            $where .= $wpdb->prepare(' AND YEAR(post_date) = %d', get_query_var('year'));
        }
        if (get_query_var('monthnum')) {
            $where .= $wpdb->prepare(' AND MONTH(post_date) = %d', get_query_var('monthnum'));
        }
        if (get_query_var('day')) {
            $where .= $wpdb->prepare(' AND DAYOFMONTH(post_date) = %d', get_query_var('day'));
        }
        // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
        $post_id = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE {$where} AND post_status IN ('" . implode("', '", esc_sql($publicly_viewable_statuses)) . "')");
        if (!$post_id) {
            return false;
        }
        if (get_query_var('feed')) {
            return get_post_comments_feed_link($post_id, get_query_var('feed'));
        } elseif (get_query_var('page') > 1) {
            return trailingslashit(get_permalink($post_id)) . user_trailingslashit(get_query_var('page'), 'single_paged');
        } else {
            return get_permalink($post_id);
        }
    }
    return false;
}

WordPress Version: 6.4

/**
 * Attempts to guess the correct URL for a 404 request based on query vars.
 *
 * @since 2.3.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @return string|false The correct URL if one is found. False on failure.
 */
function redirect_guess_404_permalink()
{
    global $wpdb;
    /**
     * Filters whether to attempt to guess a redirect URL for a 404 request.
     *
     * Returning a false value from the filter will disable the URL guessing
     * and return early without performing a redirect.
     *
     * @since 5.5.0
     *
     * @param bool $do_redirect_guess Whether to attempt to guess a redirect URL
     *                                for a 404 request. Default true.
     */
    if (false === apply_filters('do_redirect_guess_404_permalink', true)) {
        return false;
    }
    /**
     * Short-circuits the redirect URL guessing for 404 requests.
     *
     * Returning a non-null value from the filter will effectively short-circuit
     * the URL guessing, returning the passed value instead.
     *
     * @since 5.5.0
     *
     * @param null|string|false $pre Whether to short-circuit guessing the redirect for a 404.
     *                               Default null to continue with the URL guessing.
     */
    $pre = apply_filters('pre_redirect_guess_404_permalink', null);
    if (null !== $pre) {
        return $pre;
    }
    if (get_query_var('name')) {
        /**
         * Filters whether to perform a strict guess for a 404 redirect.
         *
         * Returning a truthy value from the filter will redirect only exact post_name matches.
         *
         * @since 5.5.0
         *
         * @param bool $strict_guess Whether to perform a strict guess. Default false (loose guess).
         */
        $strict_guess = apply_filters('strict_redirect_guess_404_permalink', false);
        if ($strict_guess) {
            $where = $wpdb->prepare('post_name = %s', get_query_var('name'));
        } else {
            $where = $wpdb->prepare('post_name LIKE %s', $wpdb->esc_like(get_query_var('name')) . '%');
        }
        // If any of post_type, year, monthnum, or day are set, use them to refine the query.
        if (get_query_var('post_type')) {
            if (is_array(get_query_var('post_type'))) {
                $where .= " AND post_type IN ('" . join("', '", esc_sql(get_query_var('post_type'))) . "')";
            } else {
                $where .= $wpdb->prepare(' AND post_type = %s', get_query_var('post_type'));
            }
        } else {
            $where .= " AND post_type IN ('" . implode("', '", get_post_types(array('public' => true))) . "')";
        }
        if (get_query_var('year')) {
            $where .= $wpdb->prepare(' AND YEAR(post_date) = %d', get_query_var('year'));
        }
        if (get_query_var('monthnum')) {
            $where .= $wpdb->prepare(' AND MONTH(post_date) = %d', get_query_var('monthnum'));
        }
        if (get_query_var('day')) {
            $where .= $wpdb->prepare(' AND DAYOFMONTH(post_date) = %d', get_query_var('day'));
        }
        $publicly_viewable_statuses = array_filter(get_post_stati(), 'is_post_status_viewable');
        // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
        $post_id = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE {$where} AND post_status IN ('" . implode("', '", esc_sql($publicly_viewable_statuses)) . "')");
        if (!$post_id) {
            return false;
        }
        if (get_query_var('feed')) {
            return get_post_comments_feed_link($post_id, get_query_var('feed'));
        } elseif (get_query_var('page') > 1) {
            return trailingslashit(get_permalink($post_id)) . user_trailingslashit(get_query_var('page'), 'single_paged');
        } else {
            return get_permalink($post_id);
        }
    }
    return false;
}

WordPress Version: 6.1

/**
 * Attempts to guess the correct URL for a 404 request based on query vars.
 *
 * @since 2.3.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @return string|false The correct URL if one is found. False on failure.
 */
function redirect_guess_404_permalink()
{
    global $wpdb;
    /**
     * Filters whether to attempt to guess a redirect URL for a 404 request.
     *
     * Returning a false value from the filter will disable the URL guessing
     * and return early without performing a redirect.
     *
     * @since 5.5.0
     *
     * @param bool $do_redirect_guess Whether to attempt to guess a redirect URL
     *                                for a 404 request. Default true.
     */
    if (false === apply_filters('do_redirect_guess_404_permalink', true)) {
        return false;
    }
    /**
     * Short-circuits the redirect URL guessing for 404 requests.
     *
     * Returning a non-null value from the filter will effectively short-circuit
     * the URL guessing, returning the passed value instead.
     *
     * @since 5.5.0
     *
     * @param null|string|false $pre Whether to short-circuit guessing the redirect for a 404.
     *                               Default null to continue with the URL guessing.
     */
    $pre = apply_filters('pre_redirect_guess_404_permalink', null);
    if (null !== $pre) {
        return $pre;
    }
    if (get_query_var('name')) {
        /**
         * Filters whether to perform a strict guess for a 404 redirect.
         *
         * Returning a truthy value from the filter will redirect only exact post_name matches.
         *
         * @since 5.5.0
         *
         * @param bool $strict_guess Whether to perform a strict guess. Default false (loose guess).
         */
        $strict_guess = apply_filters('strict_redirect_guess_404_permalink', false);
        if ($strict_guess) {
            $where = $wpdb->prepare('post_name = %s', get_query_var('name'));
        } else {
            $where = $wpdb->prepare('post_name LIKE %s', $wpdb->esc_like(get_query_var('name')) . '%');
        }
        // If any of post_type, year, monthnum, or day are set, use them to refine the query.
        if (get_query_var('post_type')) {
            if (is_array(get_query_var('post_type'))) {
                // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare
                $where .= " AND post_type IN ('" . join("', '", esc_sql(get_query_var('post_type'))) . "')";
            } else {
                $where .= $wpdb->prepare(' AND post_type = %s', get_query_var('post_type'));
            }
        } else {
            $where .= " AND post_type IN ('" . implode("', '", get_post_types(array('public' => true))) . "')";
        }
        if (get_query_var('year')) {
            $where .= $wpdb->prepare(' AND YEAR(post_date) = %d', get_query_var('year'));
        }
        if (get_query_var('monthnum')) {
            $where .= $wpdb->prepare(' AND MONTH(post_date) = %d', get_query_var('monthnum'));
        }
        if (get_query_var('day')) {
            $where .= $wpdb->prepare(' AND DAYOFMONTH(post_date) = %d', get_query_var('day'));
        }
        $publicly_viewable_statuses = array_filter(get_post_stati(), 'is_post_status_viewable');
        // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
        $post_id = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE {$where} AND post_status IN ('" . implode("', '", esc_sql($publicly_viewable_statuses)) . "')");
        if (!$post_id) {
            return false;
        }
        if (get_query_var('feed')) {
            return get_post_comments_feed_link($post_id, get_query_var('feed'));
        } elseif (get_query_var('page') > 1) {
            return trailingslashit(get_permalink($post_id)) . user_trailingslashit(get_query_var('page'), 'single_paged');
        } else {
            return get_permalink($post_id);
        }
    }
    return false;
}

WordPress Version: 5.6

/**
 * Attempts to guess the correct URL for a 404 request based on query vars.
 *
 * @since 2.3.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @return string|false The correct URL if one is found. False on failure.
 */
function redirect_guess_404_permalink()
{
    global $wpdb;
    /**
     * Filters whether to attempt to guess a redirect URL for a 404 request.
     *
     * Returning a false value from the filter will disable the URL guessing
     * and return early without performing a redirect.
     *
     * @since 5.5.0
     *
     * @param bool $do_redirect_guess Whether to attempt to guess a redirect URL
     *                                for a 404 request. Default true.
     */
    if (false === apply_filters('do_redirect_guess_404_permalink', true)) {
        return false;
    }
    /**
     * Short-circuits the redirect URL guessing for 404 requests.
     *
     * Returning a non-null value from the filter will effectively short-circuit
     * the URL guessing, returning the passed value instead.
     *
     * @since 5.5.0
     *
     * @param null|string|false $pre Whether to short-circuit guessing the redirect for a 404.
     *                               Default null to continue with the URL guessing.
     */
    $pre = apply_filters('pre_redirect_guess_404_permalink', null);
    if (null !== $pre) {
        return $pre;
    }
    if (get_query_var('name')) {
        /**
         * Filters whether to perform a strict guess for a 404 redirect.
         *
         * Returning a truthy value from the filter will redirect only exact post_name matches.
         *
         * @since 5.5.0
         *
         * @param bool $strict_guess Whether to perform a strict guess. Default false (loose guess).
         */
        $strict_guess = apply_filters('strict_redirect_guess_404_permalink', false);
        if ($strict_guess) {
            $where = $wpdb->prepare('post_name = %s', get_query_var('name'));
        } else {
            $where = $wpdb->prepare('post_name LIKE %s', $wpdb->esc_like(get_query_var('name')) . '%');
        }
        // If any of post_type, year, monthnum, or day are set, use them to refine the query.
        if (get_query_var('post_type')) {
            if (is_array(get_query_var('post_type'))) {
                // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare
                $where .= " AND post_type IN ('" . join("', '", esc_sql(get_query_var('post_type'))) . "')";
            } else {
                $where .= $wpdb->prepare(' AND post_type = %s', get_query_var('post_type'));
            }
        } else {
            $where .= " AND post_type IN ('" . implode("', '", get_post_types(array('public' => true))) . "')";
        }
        if (get_query_var('year')) {
            $where .= $wpdb->prepare(' AND YEAR(post_date) = %d', get_query_var('year'));
        }
        if (get_query_var('monthnum')) {
            $where .= $wpdb->prepare(' AND MONTH(post_date) = %d', get_query_var('monthnum'));
        }
        if (get_query_var('day')) {
            $where .= $wpdb->prepare(' AND DAYOFMONTH(post_date) = %d', get_query_var('day'));
        }
        // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
        $post_id = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE {$where} AND post_status = 'publish'");
        if (!$post_id) {
            return false;
        }
        if (get_query_var('feed')) {
            return get_post_comments_feed_link($post_id, get_query_var('feed'));
        } elseif (get_query_var('page') > 1) {
            return trailingslashit(get_permalink($post_id)) . user_trailingslashit(get_query_var('page'), 'single_paged');
        } else {
            return get_permalink($post_id);
        }
    }
    return false;
}

WordPress Version: 5.5

/**
 * Attempts to guess the correct URL for a 404 request based on query vars.
 *
 * @since 2.3.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @return string|false The correct URL if one is found. False on failure.
 */
function redirect_guess_404_permalink()
{
    global $wpdb;
    /**
     * Filters whether to attempt to guess a redirect URL for a 404 request.
     *
     * Returning a false value from the filter will disable the URL guessing
     * and return early without performing a redirect.
     *
     * @since 5.5.0
     *
     * @param bool $do_redirect_guess Whether to attempt to guess a redirect URL
     *                                for a 404 request. Default true.
     */
    if (false === apply_filters('do_redirect_guess_404_permalink', true)) {
        return false;
    }
    /**
     * Short-circuits the redirect URL guessing for 404 requests.
     *
     * Returning a non-null value from the filter will effectively short-circuit
     * the URL guessing, returning the passed value instead.
     *
     * @since 5.5.0
     *
     * @param null|string|false $pre Whether to short-circuit guessing the redirect for a 404.
     *                               Default null to continue with the URL guessing.
     */
    $pre = apply_filters('pre_redirect_guess_404_permalink', null);
    if (null !== $pre) {
        return $pre;
    }
    if (get_query_var('name')) {
        /**
         * Filters whether to perform a strict guess for a 404 redirect.
         *
         * Returning a truthy value from the filter will redirect only exact post_name matches.
         *
         * @since 5.5.0
         *
         * @param bool $strict_guess Whether to perform a strict guess. Default false (loose guess).
         */
        $strict_guess = apply_filters('strict_redirect_guess_404_permalink', false);
        if ($strict_guess) {
            $where = $wpdb->prepare('post_name = %s', get_query_var('name'));
        } else {
            $where = $wpdb->prepare('post_name LIKE %s', $wpdb->esc_like(get_query_var('name')) . '%');
        }
        // If any of post_type, year, monthnum, or day are set, use them to refine the query.
        if (get_query_var('post_type')) {
            $where .= $wpdb->prepare(' AND post_type = %s', get_query_var('post_type'));
        } else {
            $where .= " AND post_type IN ('" . implode("', '", get_post_types(array('public' => true))) . "')";
        }
        if (get_query_var('year')) {
            $where .= $wpdb->prepare(' AND YEAR(post_date) = %d', get_query_var('year'));
        }
        if (get_query_var('monthnum')) {
            $where .= $wpdb->prepare(' AND MONTH(post_date) = %d', get_query_var('monthnum'));
        }
        if (get_query_var('day')) {
            $where .= $wpdb->prepare(' AND DAYOFMONTH(post_date) = %d', get_query_var('day'));
        }
        // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
        $post_id = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE {$where} AND post_status = 'publish'");
        if (!$post_id) {
            return false;
        }
        if (get_query_var('feed')) {
            return get_post_comments_feed_link($post_id, get_query_var('feed'));
        } elseif (get_query_var('page') > 1) {
            return trailingslashit(get_permalink($post_id)) . user_trailingslashit(get_query_var('page'), 'single_paged');
        } else {
            return get_permalink($post_id);
        }
    }
    return false;
}

WordPress Version: 5.4

/**
 * Attempts to guess the correct URL based on query vars
 *
 * @since 2.3.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @return string|false The correct URL if one is found. False on failure.
 */
function redirect_guess_404_permalink()
{
    global $wpdb;
    if (get_query_var('name')) {
        $where = $wpdb->prepare('post_name LIKE %s', $wpdb->esc_like(get_query_var('name')) . '%');
        // If any of post_type, year, monthnum, or day are set, use them to refine the query.
        if (get_query_var('post_type')) {
            $where .= $wpdb->prepare(' AND post_type = %s', get_query_var('post_type'));
        } else {
            $where .= " AND post_type IN ('" . implode("', '", get_post_types(array('public' => true))) . "')";
        }
        if (get_query_var('year')) {
            $where .= $wpdb->prepare(' AND YEAR(post_date) = %d', get_query_var('year'));
        }
        if (get_query_var('monthnum')) {
            $where .= $wpdb->prepare(' AND MONTH(post_date) = %d', get_query_var('monthnum'));
        }
        if (get_query_var('day')) {
            $where .= $wpdb->prepare(' AND DAYOFMONTH(post_date) = %d', get_query_var('day'));
        }
        $post_id = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE {$where} AND post_status = 'publish'");
        if (!$post_id) {
            return false;
        }
        if (get_query_var('feed')) {
            return get_post_comments_feed_link($post_id, get_query_var('feed'));
        } elseif (get_query_var('page') && 1 < get_query_var('page')) {
            return trailingslashit(get_permalink($post_id)) . user_trailingslashit(get_query_var('page'), 'single_paged');
        } else {
            return get_permalink($post_id);
        }
    }
    return false;
}

WordPress Version: 5.1

/**
 * Attempts to guess the correct URL based on query vars
 *
 * @since 2.3.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @return false|string The correct URL if one is found. False on failure.
 */
function redirect_guess_404_permalink()
{
    global $wpdb;
    if (get_query_var('name')) {
        $where = $wpdb->prepare('post_name LIKE %s', $wpdb->esc_like(get_query_var('name')) . '%');
        // if any of post_type, year, monthnum, or day are set, use them to refine the query
        if (get_query_var('post_type')) {
            $where .= $wpdb->prepare(' AND post_type = %s', get_query_var('post_type'));
        } else {
            $where .= " AND post_type IN ('" . implode("', '", get_post_types(array('public' => true))) . "')";
        }
        if (get_query_var('year')) {
            $where .= $wpdb->prepare(' AND YEAR(post_date) = %d', get_query_var('year'));
        }
        if (get_query_var('monthnum')) {
            $where .= $wpdb->prepare(' AND MONTH(post_date) = %d', get_query_var('monthnum'));
        }
        if (get_query_var('day')) {
            $where .= $wpdb->prepare(' AND DAYOFMONTH(post_date) = %d', get_query_var('day'));
        }
        $post_id = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE {$where} AND post_status = 'publish'");
        if (!$post_id) {
            return false;
        }
        if (get_query_var('feed')) {
            return get_post_comments_feed_link($post_id, get_query_var('feed'));
        } elseif (get_query_var('page') && 1 < get_query_var('page')) {
            return trailingslashit(get_permalink($post_id)) . user_trailingslashit(get_query_var('page'), 'single_paged');
        } else {
            return get_permalink($post_id);
        }
    }
    return false;
}

WordPress Version: 4.4

/**
 * Attempts to guess the correct URL based on query vars
 *
 * @since 2.3.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @return false|string The correct URL if one is found. False on failure.
 */
function redirect_guess_404_permalink()
{
    global $wpdb;
    if (get_query_var('name')) {
        $where = $wpdb->prepare("post_name LIKE %s", $wpdb->esc_like(get_query_var('name')) . '%');
        // if any of post_type, year, monthnum, or day are set, use them to refine the query
        if (get_query_var('post_type')) {
            $where .= $wpdb->prepare(" AND post_type = %s", get_query_var('post_type'));
        } else {
            $where .= " AND post_type IN ('" . implode("', '", get_post_types(array('public' => true))) . "')";
        }
        if (get_query_var('year')) {
            $where .= $wpdb->prepare(" AND YEAR(post_date) = %d", get_query_var('year'));
        }
        if (get_query_var('monthnum')) {
            $where .= $wpdb->prepare(" AND MONTH(post_date) = %d", get_query_var('monthnum'));
        }
        if (get_query_var('day')) {
            $where .= $wpdb->prepare(" AND DAYOFMONTH(post_date) = %d", get_query_var('day'));
        }
        $post_id = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE {$where} AND post_status = 'publish'");
        if (!$post_id) {
            return false;
        }
        if (get_query_var('feed')) {
            return get_post_comments_feed_link($post_id, get_query_var('feed'));
        } elseif (get_query_var('page') && 1 < get_query_var('page')) {
            return trailingslashit(get_permalink($post_id)) . user_trailingslashit(get_query_var('page'), 'single_paged');
        } else {
            return get_permalink($post_id);
        }
    }
    return false;
}

WordPress Version: 4.3

/**
 * Attempts to guess the correct URL based on query vars
 *
 * @since 2.3.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 * @global WP_Rewrite $wp_rewrite
 *
 * @return false|string The correct URL if one is found. False on failure.
 */
function redirect_guess_404_permalink()
{
    global $wpdb, $wp_rewrite;
    if (get_query_var('name')) {
        $where = $wpdb->prepare("post_name LIKE %s", $wpdb->esc_like(get_query_var('name')) . '%');
        // if any of post_type, year, monthnum, or day are set, use them to refine the query
        if (get_query_var('post_type')) {
            $where .= $wpdb->prepare(" AND post_type = %s", get_query_var('post_type'));
        } else {
            $where .= " AND post_type IN ('" . implode("', '", get_post_types(array('public' => true))) . "')";
        }
        if (get_query_var('year')) {
            $where .= $wpdb->prepare(" AND YEAR(post_date) = %d", get_query_var('year'));
        }
        if (get_query_var('monthnum')) {
            $where .= $wpdb->prepare(" AND MONTH(post_date) = %d", get_query_var('monthnum'));
        }
        if (get_query_var('day')) {
            $where .= $wpdb->prepare(" AND DAYOFMONTH(post_date) = %d", get_query_var('day'));
        }
        $post_id = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE {$where} AND post_status = 'publish'");
        if (!$post_id) {
            return false;
        }
        if (get_query_var('feed')) {
            return get_post_comments_feed_link($post_id, get_query_var('feed'));
        } elseif (get_query_var('page')) {
            return trailingslashit(get_permalink($post_id)) . user_trailingslashit(get_query_var('page'), 'single_paged');
        } else {
            return get_permalink($post_id);
        }
    }
    return false;
}

WordPress Version: 4.1

/**
 * Attempts to guess the correct URL based on query vars
 *
 * @since 2.3.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @return bool|string The correct URL if one is found. False on failure.
 */
function redirect_guess_404_permalink()
{
    global $wpdb, $wp_rewrite;
    if (get_query_var('name')) {
        $where = $wpdb->prepare("post_name LIKE %s", $wpdb->esc_like(get_query_var('name')) . '%');
        // if any of post_type, year, monthnum, or day are set, use them to refine the query
        if (get_query_var('post_type')) {
            $where .= $wpdb->prepare(" AND post_type = %s", get_query_var('post_type'));
        } else {
            $where .= " AND post_type IN ('" . implode("', '", get_post_types(array('public' => true))) . "')";
        }
        if (get_query_var('year')) {
            $where .= $wpdb->prepare(" AND YEAR(post_date) = %d", get_query_var('year'));
        }
        if (get_query_var('monthnum')) {
            $where .= $wpdb->prepare(" AND MONTH(post_date) = %d", get_query_var('monthnum'));
        }
        if (get_query_var('day')) {
            $where .= $wpdb->prepare(" AND DAYOFMONTH(post_date) = %d", get_query_var('day'));
        }
        $post_id = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE {$where} AND post_status = 'publish'");
        if (!$post_id) {
            return false;
        }
        if (get_query_var('feed')) {
            return get_post_comments_feed_link($post_id, get_query_var('feed'));
        } elseif (get_query_var('page')) {
            return trailingslashit(get_permalink($post_id)) . user_trailingslashit(get_query_var('page'), 'single_paged');
        } else {
            return get_permalink($post_id);
        }
    }
    return false;
}

WordPress Version: 4.0

/**
 * Attempts to guess the correct URL based on query vars
 *
 * @since 2.3.0
 * @uses $wpdb
 *
 * @return bool|string The correct URL if one is found. False on failure.
 */
function redirect_guess_404_permalink()
{
    global $wpdb, $wp_rewrite;
    if (get_query_var('name')) {
        $where = $wpdb->prepare("post_name LIKE %s", $wpdb->esc_like(get_query_var('name')) . '%');
        // if any of post_type, year, monthnum, or day are set, use them to refine the query
        if (get_query_var('post_type')) {
            $where .= $wpdb->prepare(" AND post_type = %s", get_query_var('post_type'));
        } else {
            $where .= " AND post_type IN ('" . implode("', '", get_post_types(array('public' => true))) . "')";
        }
        if (get_query_var('year')) {
            $where .= $wpdb->prepare(" AND YEAR(post_date) = %d", get_query_var('year'));
        }
        if (get_query_var('monthnum')) {
            $where .= $wpdb->prepare(" AND MONTH(post_date) = %d", get_query_var('monthnum'));
        }
        if (get_query_var('day')) {
            $where .= $wpdb->prepare(" AND DAYOFMONTH(post_date) = %d", get_query_var('day'));
        }
        $post_id = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE {$where} AND post_status = 'publish'");
        if (!$post_id) {
            return false;
        }
        if (get_query_var('feed')) {
            return get_post_comments_feed_link($post_id, get_query_var('feed'));
        } elseif (get_query_var('page')) {
            return trailingslashit(get_permalink($post_id)) . user_trailingslashit(get_query_var('page'), 'single_paged');
        } else {
            return get_permalink($post_id);
        }
    }
    return false;
}

WordPress Version: 3.7

/**
 * Attempts to guess the correct URL based on query vars
 *
 * @since 2.3.0
 * @uses $wpdb
 *
 * @return bool|string The correct URL if one is found. False on failure.
 */
function redirect_guess_404_permalink()
{
    global $wpdb, $wp_rewrite;
    if (get_query_var('name')) {
        $where = $wpdb->prepare("post_name LIKE %s", like_escape(get_query_var('name')) . '%');
        // if any of post_type, year, monthnum, or day are set, use them to refine the query
        if (get_query_var('post_type')) {
            $where .= $wpdb->prepare(" AND post_type = %s", get_query_var('post_type'));
        } else {
            $where .= " AND post_type IN ('" . implode("', '", get_post_types(array('public' => true))) . "')";
        }
        if (get_query_var('year')) {
            $where .= $wpdb->prepare(" AND YEAR(post_date) = %d", get_query_var('year'));
        }
        if (get_query_var('monthnum')) {
            $where .= $wpdb->prepare(" AND MONTH(post_date) = %d", get_query_var('monthnum'));
        }
        if (get_query_var('day')) {
            $where .= $wpdb->prepare(" AND DAYOFMONTH(post_date) = %d", get_query_var('day'));
        }
        $post_id = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE {$where} AND post_status = 'publish'");
        if (!$post_id) {
            return false;
        }
        if (get_query_var('feed')) {
            return get_post_comments_feed_link($post_id, get_query_var('feed'));
        } elseif (get_query_var('page')) {
            return trailingslashit(get_permalink($post_id)) . user_trailingslashit(get_query_var('page'), 'single_paged');
        } else {
            return get_permalink($post_id);
        }
    }
    return false;
}