Как использовать Custom Post Status в WordPress: пошаговое руководство с примерами

В WordPress существует стандартный набор статусов публикаций: publish, draft, pending, private и несколько других. Однако иногда стандартных статусов недостаточно для сложных сценариев работы с контентом, и возникает необходимость добавить собственный, кастомный статус публикации (Custom Post Status). В этой статье подробно разберём, как создать, зарегистрировать и использовать кастомные статусы постов для решения конкретных задач.

Что такое Custom Post Status и зачем они нужны

Custom Post Status — это дополнительные статусы, которые можно добавить в WordPress для расширения логики публикации и управления контентом. Например, вы можете добавить статус «на рассмотрении», «в работе» или «требует правки». Это особенно полезно для сайтов с большим количеством редакторов или сложным workflow.

Использование кастомных статусов позволяет:

  • Чётко разграничить этапы работы с публикацией;
  • Автоматизировать процессы на сайте с помощью триггеров по статусам;
  • Улучшить UX для авторов и редакторов;
  • Настроить фильтрацию записей в админке по новым статусам.

Регистрация кастомного статуса в WordPress

Для регистрации нового статуса используется функция register_post_status(). Важно привязать её вызов к хуку init, чтобы статус был доступен при загрузке WordPress.

Пример регистрации статуса in_review — «На рассмотрении»:

add_action('init', 'wptavern_register_custom_post_status');
function wptavern_register_custom_post_status() {
    register_post_status('in_review', array(
        'label'                     => _x('На рассмотрении', 'post'),
        'public'                    => true,
        'exclude_from_search'       => false,
        'show_in_admin_all_list'    => true,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop('На рассмотрении <span class="count">(%s)</span>', 'На рассмотрении <span class="count">(%s)</span>'),
    ));
}

Разберём параметры:

  • label — название статуса для отображения в админке;
  • public — делает статус видимым на фронтенде, если нужно;
  • exclude_from_search — исключать ли из поиска;
  • show_in_admin_all_list — показывать ли записи с этим статусом в списке «Все записи»;
  • show_in_admin_status_list — показывать статус в фильтрах админки;
  • label_count — шаблон для отображения количества записей с таким статусом.

Добавление кастомного статуса в выпадающий список статусов поста

После регистрации статуса нужно добавить его в метабокс редактирования записи, чтобы пользователь мог выбрать новый статус. Для этого используем JavaScript и PHP.

PHP-код для вставки статуса в список статусов:

add_action('admin_footer-post.php', 'wptavern_append_custom_post_status_js');
add_action('admin_footer-post-new.php', 'wptavern_append_custom_post_status_js');
function wptavern_append_custom_post_status_js() {
    global $post;
    if($post->post_type != 'post') return; // Можно заменить на свой тип
    ?>
    <script>
    jQuery(document).ready(function($){
        // Добавляем статус в селектор
        $('select#post_status').append('<option value="in_review" <?php selected($post->post_status, 'in_review'); ?>>На рассмотрении</option>');
        // Если текущий статус равен кастомному, меняем отображение
        if($('#post_status').val() == 'in_review') {
            $('#post-status-display').text('На рассмотрении');
        }
    });
    </script>
    <?php
}

Этот код добавит пункт «На рассмотрении» в выпадающий список статусов при редактировании записи типа post. При необходимости замените тип записи на нужный.

Фильтрация записей по кастомным статусам в админке

Чтобы фильтр по новому статусу появился в списке записей, мы уже включили параметр show_in_admin_status_list при регистрации статуса. Добавим вывод ссылки с количеством записей с этим статусом с помощью хука views_edit-post:

add_filter('views_edit-post', 'wptavern_custom_post_status_views');
function wptavern_custom_post_status_views($views) {
    $count = wp_count_posts()->in_review;
    $class = (isset($_GET['post_status']) && $_GET['post_status'] === 'in_review') ? 'current' : '';
    $url = admin_url('edit.php?post_status=in_review&post_type=post');
    $views['in_review'] = "<a href='$url' class='$class'>На рассмотрении <span class='count'>($count)</span></a>";
    return $views;
}

Теперь в верхней части списка записей появится вкладка «На рассмотрении» с количеством таких записей.

Использование кастомных статусов для автоматизации процессов

Кастомные статусы можно применять не только для визуального разграничения, но и для запуска автоматических действий. Например, можно отправлять уведомления редактору при переходе записи в статус «На рассмотрении» или автоматически менять статус после определённого времени.

Пример отправки уведомления при смене статуса:

add_action('transition_post_status', 'wptavern_notify_on_custom_status', 10, 3);
function wptavern_notify_on_custom_status($new_status, $old_status, $post) {
    if ($new_status === 'in_review' && $old_status !== 'in_review' && $post->post_type === 'post') {
        // Здесь можно отправить письмо редактору или выполнить другое действие
        wp_mail('editor@example.com', 'Публикация на рассмотрении', 'Публикация "' . $post->post_title . '" теперь на рассмотрении.');
    }
}

Такой подход позволяет реализовать полноценные workflow прямо в WordPress без сторонних сервисов.

Совместимость кастомных статусов с WPShop и дополнительными плагинами

Если вы используете плагины из WPShop, кастомные статусы прекрасно интегрируются с большинством из них. Например, в плагине Expert Review можно использовать кастомные статусы для управления этапами обзоров, а в Quizle — для управления состоянием викторин.

При работе с кастомными статусами важно проверять, поддерживает ли конкретный плагин расширение статусов или не конфликтует ли с ними.

Подведение итогов и рекомендации

Создание и использование кастомных статусов — мощный инструмент для кастомизации и оптимизации работы с контентом в WordPress. Вот основные советы:

  • Всегда регистрируйте статусы на хуке init;
  • Добавляйте статусы в выпадающие списки через JavaScript в админке;
  • Используйте фильтры для отображения кастомных статусов в списках и фильтрах;
  • Реализуйте автоматизацию на основе изменения статусов с помощью хука transition_post_status;
  • Проверяйте совместимость с плагинами, особенно если используете WPShop продукты.

Так вы сможете гибко управлять контентом, улучшать процессы и делать работу редакторов удобнее.

Как создать многоуровневое меню в WordPress с подменю
24.02.2026
Как автоматизировать создание и удаление временных файлов в WordPress
21.01.2026
Как добавить поддержку WebP в WordPress без плагинов
10.04.2026
Как использовать хук WooCommerce 'woocommerce_product_query' для кастомизации списка товаров
04.06.2026
Как создать собственный шорткод в WordPress: подробное руководство
04.11.2025