Хук redirect_post_location в WordPress позволяет изменить конечный URL, на который перенаправляется пользователь после сохранения, публикации или обновления записи. Этот хук предоставляет возможность кастомизировать поведение админ-панели, улучшая пользовательский опыт.
apply_filters( ‘redirect_post_location’, string $location, int $post_id )Параметры
- $location (string): URL, на который будет перенаправлен пользователь.
- $post_id (int): ID поста, который в данный момент обрабатывается.
Пример работы хука
Когда вы создаете новый пост, URL может выглядеть как /wp-admin/post-new.php. После нажатия кнопки «Сохранить» или «Опубликовать» URL изменится на что-то вроде wp-admin/post.php?post=3061&action=edit&message=10. Хук redirect_post_location позволяет изменить этот новый URL перед перенаправлением.
Использование
Для применения фильтра redirect_post_location, вы можете использовать следующий шаблон:
function custom_redirect_post_location( $location, $post_id ) {
    // Ваши изменения...
    return $location;
}
add_filter( 'redirect_post_location', 'custom_redirect_post_location', 10, 2 );
Пример 1: Перенаправление на список записей при создании поста
Предположим, вы хотите перенаправить пользователя на страницу админ-панели со списком всех записей после создания или обновления записи, а не оставлять его на странице редактирования. Вот как это можно сделать с помощью фильтра redirect_post_location и функции admin_url():
/**
 * Перенаправить на edit.php при сохранении или публикации поста.
 */
function redirect_to_post_list_after_save( $location, $post_id ) {
    // Проверяем, была ли нажата кнопка "Сохранить" или "Опубликовать".
    if ( isset( $_POST['save'] ) || isset( $_POST['publish'] ) ) {
        return admin_url( "edit.php" ); // Перенаправление на список постов.
    }
    return $location; // Возвращаем исходный URL, если условия не выполнены.
}
add_filter( 'redirect_post_location', 'redirect_to_post_list_after_save', 10, 2 );
В этом примере, если пользователь нажимает на кнопку «Сохранить» или «Опубликовать», он будет перенаправлен на страницу со списком всех записей (URL будет выглядеть как http://example.com/wp-admin/edit.php).
Пример 2: Добавление уведомления при обновлении поста
В этом примере мы изменим URL так, чтобы он содержал уведомление об успешном обновлении поста:
/**
 * Добавить уведомление об успешном обновлении поста.
 */
function add_success_message_after_update( $location, $post_id ) {
    // Добавляем параметр в URL с уведомлением.
    return add_query_arg( 'message', 'post_updated', $location );
}
add_filter( 'redirect_post_location', 'add_success_message_after_update', 10, 2 );
Теперь после обновления поста URL будет содержать параметр message=post_updated, который можно использовать для отображения соответствующего уведомления.
Пример 3: Перенаправление на страницу просмотра поста
Если вы хотите перенаправить пользователя на страницу просмотра поста после его публикации, вы можете использовать следующий код:
/**
 * Перенаправить на страницу просмотра поста после его публикации.
 */
function redirect_to_view_post_after_publish( $location, $post_id ) {
    // Проверяем, была ли нажата кнопка "Опубликовать".
    if ( isset( $_POST['publish'] ) ) {
        return get_permalink( $post_id ); // Перенаправление на страницу просмотра.
    }
    return $location; // Возвращаем исходный URL, если условия не выполнены.
}
add_filter( 'redirect_post_location', 'redirect_to_view_post_after_publish', 10, 2 );
Теперь, когда пользователь публикует пост, он будет перенаправлен непосредственно на страницу просмотра этого поста.
Заключение
Хук redirect_post_location — это полезный инструмент для разработчиков WordPress, который позволяет настроить процесс перенаправления пользователей после сохранения или обновления контента. С помощью этого хука вы можете улучшить пользовательский опыт, адаптируя админ-панель под конкретные требования вашего проекта.
