Как создать и использовать кастомные статусы записей в WordPress

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

Что такое кастомные статусы записей и зачем они нужны

Статус записи — это параметр, который определяет текущее состояние публикации. Кастомные статусы позволяют расширить стандартный набор и организовать собственные процессы работы с контентом. Например, можно добавить статус «на доработке», «ожидает проверки редактором», «архив» и т.п.

Это полезно для сайтов с командной работой, где важно видеть именно те этапы публикации, которые отражают внутренний workflow. Также кастомные статусы можно использовать для реализации сложных сценариев публикации и фильтрации записей.

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

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

Рассмотрим пример создания статуса wpassist_reviewed — «Проверено командой».

function wpassist_register_custom_post_status() {
    register_post_status('wpassist_reviewed', 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>'),
    ));
}
add_action('init', 'wpassist_register_custom_post_status');

В параметрах можно указать, будет ли статус публичным, отображаться ли в админке, учитываться ли в поиске и т.д. Благодаря параметру show_in_admin_status_list статус появится в админ-панели под списком статусов.

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

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

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

function wpassist_append_custom_post_status() {
    global $post;
    $complete = '';
    $label = '';
    if ($post->post_status == 'wpassist_reviewed') {
        $complete = ' selected="selected"';
        $label = '<span id="post-status-display">Проверено командой</span>';
    }
    ?>
    <script>
    jQuery(document).ready(function($){
        $('select#post_status').append('<option value="wpassist_reviewed"'+('<?php echo $complete; ?>')+'>Проверено командой</option>');
        if('<?php echo $label; ?>') {
            $('.misc-pub-section label').append('<?php echo $label; ?>');
        }
    });
    </script>
    <?php
}
add_action('post_submitbox_misc_actions', 'wpassist_append_custom_post_status');

В этом коде мы добавляем новый пункт в селектор статусов и, если статус выбран, выводим его название рядом с кнопкой «Обновить».

Отображение кастомного статуса в списке записей и фильтрация

Чтобы кастомный статус отображался в списках записей в админке, мы уже указали параметр show_in_admin_all_list. Но полезно добавить фильтр по этому статусу в верхнюю панель фильтрации.

Добавим фильтр по статусу с помощью хука restrict_manage_posts:

function wpassist_add_post_status_filter() {
    global $typenow;
    if ($typenow != 'post') return;
    $status = isset($_GET['post_status']) ? $_GET['post_status'] : '';
    ?>
    <select name="post_status" id="post_status">
        <option value="" <?php selected($status, ''); ?>>Все статусы</option>
        <option value="publish" <?php selected($status, 'publish'); ?>>Опубликовано</option>
        <option value="wpassist_reviewed" <?php selected($status, 'wpassist_reviewed'); ?>>Проверено командой</option>
        <option value="draft" <?php selected($status, 'draft'); ?>>Черновик</option>
    </select>
    <?php
}
add_action('restrict_manage_posts', 'wpassist_add_post_status_filter');

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

Применение кастомных статусов в своих сценариях

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

$args = array(
    'post_type' => 'post',
    'post_status' => 'wpassist_reviewed',
    'posts_per_page' => 10,
);
$query = new WP_Query($args);
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        echo '<h2>' . get_the_title() . '</h2>';
        echo '<div>' . get_the_excerpt() . '</div>';
    }
}
wp_reset_postdata();

Такой подход позволяет строить на сайте сложные фильтрации и показывать контент, прошедший определённые этапы обработки.

Плагины для работы с кастомными статусами

Если не хочется писать код вручную, можно использовать готовые плагины:

  • PublishPress — мощный инструмент для управления контентом и кастомными статусами с удобным интерфейсом.
  • Custom Post Status — простой плагин для добавления и управления новыми статусами записей.
  • WP Status Manager — позволяет создавать статусы и управлять ими через админку.

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

Подытожим: рекомендации по использованию кастомных статусов

Используйте кастомные статусы для:

  • Определения этапов работы с контентом в командных проектах.
  • Фильтрации и отображения записей в админке и на сайте.
  • Организации сложных процессов публикации.

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

Как добавить автоподпись в электронные письма WordPress
21.12.2025
Как изменить имя автора в сообщениях WordPress
27.03.2026
Как создать автоматическое резервное копирование в WordPress без плагинов
17.03.2026
Как удалить заблокированные товары из WooCommerce
26.04.2026
Как создать собственный виджет в WordPress с поддержкой AJAX
07.02.2026