Перенаправление после сохранения поста

Вопрос или проблема

Я разрабатываю плагин. Здесь я хотел бы перенаправить на страницу всех пользовательских записей после сохранения пользовательской записи. Мой код выглядит следующим образом.

add_action( 'save_post', [ $this, 'save_meta_values' ] );

public function save_meta_values( $post_id )
    {

       //дополнительный код здесь

       return $post_id;  // Я хотел бы перенаправить здесь
    }

Как я могу перенаправить на страницу всех записей, как wp_redirect( admin_url( 'edit.php?post_type=news_info' ) ); ?

Возможно, я не смог правильно выразить свои мысли.

введите описание изображения здесь

Ответ или решение

Чтобы реализовать редирект на страницу всех пользовательских постов после сохранения нового поста в вашем плагине WordPress, вы можете использовать хук save_post и функцию wp_redirect(). Однако следует помнить о некоторых важных моментах, связанных с обработкой редиректов в WordPress, особенно в контексте сохранения.

Проблема редиректа в обработчике save_post

Когда выполняется хук save_post, пользователь может перегружать страницу, что может привести к неправильному состоянию и потенциальным ошибкам. В WordPress редирект следует выполнять с помощью отдельного механизма, так как вызов wp_redirect в функции сохранения может не сработать должным образом.

Рекомендации по реализации

Чтобы корректно реализовать редирект на нужную страницу, следуйте следующему шагу:

  1. Используйте add_action для хука save_post для обработки сохранения метаполей и выполнения действий после сохранения поста.

  2. Вместо непосредственного редиректа в функции save_meta_values, сохраните информацию о необходимости редиректа в пользовательские метаданные или глобальные переменные.

  3. Затем, используя хук admin_notices или admin_init, проверьте, требуется ли редирект, и выполните его.

Пример кода

Вот пример того, как вы можете реализовать данное решение:

add_action( 'save_post', [ $this, 'save_meta_values' ] );

public function save_meta_values( $post_id ) {
    // Ваша логика сохранения метаполей
    // ...

    // Сохраняем информацию о редиректе
    update_post_meta( $post_id, '_redirect_after_save', true );
}

add_action( 'admin_init', 'redirect_after_post_save' );

function redirect_after_post_save() {
    if ( isset( $_REQUEST['post'] ) ) {
        $post_id = intval( $_REQUEST['post'] );

        // Проверяем, нужно ли делать редирект
        $redirect = get_post_meta( $post_id, '_redirect_after_save', true );
        if ( $redirect ) {
            delete_post_meta( $post_id, '_redirect_after_save' ); // Удаляем метаданные после использования
            wp_redirect( admin_url( 'edit.php?post_type=news_info' ) );
            exit; // Завершаем выполнение, чтобы не было дальнейших выводов
        }
    }
}

Пояснения к коду

  1. Сохранение метаданных: После сохранения поста мы сохраняем метаданные, которые указывают, что требуется редирект.

  2. Хук admin_init: Здесь мы проверяем, есть ли запрашиваемый идентификатор поста и необходим ли редирект по метаданным.

  3. Редирект: Если метаданные подтверждают необходимость редиректа, выполняется вызов функции wp_redirect.

  4. exit: Это критически важный момент — после редиректа необходимо завершить выполнение сценария, чтобы предотвратить возможные ошибки или дополнительные выводы на страницу.

Заключение

Используя этот метод, вы сможете безопасно и эффективно реализовать перенаправление после сохранения вашего пользовательского поста в WordPress. Эта практика не только улучшит пользовательский интерфейс вашего плагина, но и позволит избежать потенциальных ошибок, связанных с двойными обращениями к базе данных и нежелательными последствиями при обновлении страниц.

Оцените материал
Добавить комментарий

Капча загружается...