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);