The old_slug_redirect_post_id WordPress PHP filter allows you to modify the redirect post ID when an old slug is detected.
Usage
add_filter('old_slug_redirect_post_id', 'your_custom_function', 10, 1);
function your_custom_function($id) {
// Your custom code here
return $id;
}
Parameters
$id(int) – The redirect post ID.
More information
See WordPress Developer Resources: old_slug_redirect_post_id
Examples
Change redirect post ID
Update the redirect post ID based on your custom logic.
function update_redirect_post_id($id) {
// Update the redirect post ID
$new_id = 123;
return $new_id;
}
add_filter('old_slug_redirect_post_id', 'update_redirect_post_id', 10, 1);
Cancel the redirect
Prevent the redirection by returning 0 as the redirect post ID.
function cancel_old_slug_redirect($id) {
// Cancel the redirect
return 0;
}
add_filter('old_slug_redirect_post_id', 'cancel_old_slug_redirect', 10, 1);
Redirect to a custom post type
Redirect to a custom post type with the same slug if the post ID is not found.
function custom_post_type_redirect($id) {
if (!$id) {
$slug = get_query_var('name');
$custom_post = get_page_by_path($slug, OBJECT, 'custom_post_type');
if ($custom_post) {
return $custom_post->ID;
}
}
return $id;
}
add_filter('old_slug_redirect_post_id', 'custom_post_type_redirect', 10, 1);
Log old slug redirects
Log the old slug redirects to a custom log file for further analysis.
function log_old_slug_redirects($id) {
// Log the old slug redirects
$log_message = "Old Slug Redirect: Post ID: {$id}\n";
error_log($log_message, 3, '/path/to/your/custom/logfile.log');
return $id;
}
add_filter('old_slug_redirect_post_id', 'log_old_slug_redirects', 10, 1);
Modify the redirect post ID based on user role
Change the redirect post ID based on the user role, redirecting users with different roles to different posts.
function user_role_based_redirect($id) {
// Get the current user
$current_user = wp_get_current_user();
if (in_array('administrator', $current_user->roles)) {
// Redirect administrators to a specific post
$id = 456;
} elseif (in_array('editor', $current_user->roles)) {
// Redirect editors to a different post
$id = 789;
}
return $id;
}
add_filter('old_slug_redirect_post_id', 'user_role_based_redirect', 10, 1);