The redirect_guess_404_permalink() WordPress PHP function attempts to guess the correct URL for a 404 request based on query variables.
Usage
$redirect_url = redirect_guess_404_permalink();
Parameters
- None
More information
See WordPress Developer Resources: redirect_guess_404_permalink
Examples
Redirect to Guessed URL
Detect when a 404 error occurs and redirect to the guessed URL.
function my_404_guess_redirect() {
if (is_404()) {
$redirect_url = redirect_guess_404_permalink();
if ($redirect_url) {
wp_redirect($redirect_url, 301);
exit;
}
}
}
add_action('template_redirect', 'my_404_guess_redirect');
Custom 404 Template
Use the guessed URL in a custom 404 template to suggest a possible correct link.
In your theme’s 404.php:
$guessed_url = redirect_guess_404_permalink();
if ($guessed_url) {
echo "Did you mean: <a href='{$guessed_url}'>{$guessed_url}</a>?";
}
Custom 404 Message
Display a custom 404 message if the guessed URL is found.
function my_custom_404_message() {
$guessed_url = redirect_guess_404_permalink();
if ($guessed_url) {
echo "Oops! It looks like the page you're looking for may have moved. Try visiting <a href='{$guessed_url}'>{$guessed_url}</a> instead.";
} else {
echo "We're sorry, but the page you're looking for cannot be found.";
}
}
add_action('wp_404_error_message', 'my_custom_404_message');
Logging 404 Errors
Log 404 errors with guessed URL in a custom log file.
function log_404_errors() {
if (is_404()) {
$guessed_url = redirect_guess_404_permalink();
$current_url = home_url(add_query_arg(array(), $wp->request));
$log_message = "404 Error: {$current_url} | Guessed URL: {$guessed_url}" . PHP_EOL;
error_log($log_message, 3, "/path/to/your/logfile.log");
}
}
add_action('template_redirect', 'log_404_errors');
Redirect 404 Errors to a Specific Page
Redirect 404 errors to a specific page if the guessed URL is not found.
function redirect_404_to_specific_page() {
if (is_404()) {
$guessed_url = redirect_guess_404_permalink();
if (!$guessed_url) {
wp_redirect(home_url('/your-specific-page/'), 301);
exit;
}
}
}
add_action('template_redirect', 'redirect_404_to_specific_page');