Как перезагрузить редактор страницы поста после публикации?

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

У меня есть уникальный тип веб-сайта, который требует всего 10-20 секунд, чтобы создать новый пост. Я хочу, чтобы мой сайт на WordPress автоматически перезагружал страницу редактора после публикации нового поста, поэтому мне не нужно нажимать кнопку “Добавить новый”, чтобы загрузить пустую страницу редактора постов.

Ни в коем случае я не рекомендую это делать, так как это уменьшит гибкость. Однако, если у вас очень редкий случай и вам действительно нужно то, что вы говорите, то вставьте этот код в functions.php:

add_action( 'save_post', 'newpost_redirect', 99);
function newpost_redirect() {
    if ( isset($_POST['original_publish']) && "Publish"==$_POST['original_publish']){ 
        wp_redirect(admin_url('post-new.php') , 302 ); exit;
    }
}

Я думаю, что использование хука redirect_post_location (см. codex) было бы лучшим решением — он срабатывает только в этом конкретном контексте (когда пост перенаправляется после редактирования – см. код).

add_filter('redirect_post_location', 'redirect_after_post_update', 10, 2 );
function redirect_after_post_update( $location, $post_id ) {

    // убедимся, что мы находимся в панели администратора
    if ( ! is_admin() ) {
        return $location;
    }

    // проверим, был ли пост опубликован, а не обновлен
    if ( ! isset( $_POST[ 'publish' ] ) ) {
        return $location;
    }

    $new_post_sceen = get_admin_url( '', 'post-new.php');

    if ( ! empty( $new_post_sceen ) ) {
        return $new_post_sceen;
    }

    return $location;
}

вы можете использовать JS код для достижения этой функциональности.

add_action('admin_footer-post-new.php', 'reload_editor_after_publish');

function reload_editor_after_publish() {
    ?>
    <script type="text/javascript">
        jQuery(document).ready(function($) {
            $(document).on('publish-post', function() {
                location.reload(true);
            });
        });
    </script>
    <?php
}

.

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

Как перезагрузить редактор страницы поста после его публикации в WordPress

Если у вас есть сайт на WordPress, где публикация новых постов занимает всего 10-20 секунд, может возникнуть необходимость автоматически перезагружать редактор после того, как пост был опубликован. Это позволит избежать кликов по кнопке "Добавить новый", упрощая тем самым рабочий процесс. Рассмотрим несколько подходов для реализации этой функциональности.

Подход 1: Использование хука save_post

Этот метод использует встроенный хук save_post, который срабатывает при сохранении поста. Ниже приведен исходный код, который нужно добавить в файл functions.php вашей темы:

add_action( 'save_post', 'newpost_redirect', 99 );
function newpost_redirect() {
    if ( isset($_POST['original_publish']) && "Опубликовать" == $_POST['original_publish']) { 
        wp_redirect(admin_url('post-new.php'), 302); 
        exit;
    }
}

Пояснение кода:

  • add_action(): Регистрирует функцию newpost_redirect на событие save_post.
  • if (isset($_POST[‘original_publish’]) && "Опубликовать" == $_POST[‘original_publish’]): Проверяет, была ли нажата кнопка "Опубликовать".
  • wp_redirect: Перенаправляет пользователя на страницу создания нового поста.

Подход 2: Использование фильтра redirect_post_location

Вместо использования save_post, вы можете воспользоваться фильтром redirect_post_location, который более целенаправлен и срабатывает в специфическом контексте редиректа при редактировании поста. Пример кода:

add_filter('redirect_post_location', 'redirect_after_post_update', 10, 2);
function redirect_after_post_update( $location, $post_id ) {
    // Убедимся, что мы в админке
    if ( ! is_admin() ) {
        return $location;
    }

    // Проверяем, был ли пост опубликован, а не обновлен
    if ( ! isset( $_POST['publish'] ) ) {
        return $location;
    }

    $new_post_screen = get_admin_url('', 'post-new.php');

    if ( ! empty( $new_post_screen ) ) {
        return $new_post_screen;
    }

    return $location;
}

Объяснение:

  • is_admin(): Проверяет, находитесь ли вы в админ-панели.
  • isset($_POST[‘publish’]): Убедитесь, что это именно публикация поста.
  • get_admin_url(‘post-new.php’): Получает URL для добавления нового поста.

Подход 3: Использование JavaScript

Можно реализовать эту функциональность с помощью JavaScript, добавляя скрипт в нижний колонтитул страницы создания поста. Пример кода:

add_action('admin_footer-post-new.php', 'reload_editor_after_publish');

function reload_editor_after_publish() {
    ?>
    <script type="text/javascript">
        jQuery(document).ready(function($) {
            $(document).on('publish-post', function() {
                location.reload(true);
            });
        });
    </script>
    <?php
}

Описание:

  • $(document).ready(): Дожидается полной загрузки документа.
  • $(document).on(‘publish-post’, …): Позволяет слушать событие публикации поста и перезагружает страницу.

Заключение

Все предложенные методы помогут вам автоматически перезагружать страницу редактора после публикации поста. Выбор подхода зависит от ваших предпочтений и специфики веб-сайта. Учтите, что постоянная перезагрузка страницы может снизить гибкость работы с постами, поэтому используйте предложенные решения с осторожностью.

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

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