Как использовать post status в WordPress для управления содержанием

WordPress по умолчанию использует стандартные статусы записей: publish, draft, pending и несколько других. Однако в ряде проектов возникает необходимость создавать собственные статусы (post status) для удобного управления жизненным циклом контента. В этой статье мы подробно рассмотрим, как добавить, зарегистрировать и использовать собственные статусы записей, а также как отображать их в админке и фильтровать по ним записи.

Что такое post status в WordPress и зачем создавать свои

Post status — это параметр, который определяет текущее состояние записи (поста, страницы, custom post type) в WordPress. Помимо стандартных статусов, например, publish (опубликовано) или draft (черновик), можно создавать новые, например, review (на проверке), archived (архивный), expired (истёкший) и т.д.

Зачем это нужно? Например, если у вас сайт с новостями, вы можете добавить статус needs_editing для статей, которые требуют доработки. Или для кастомного типа записей «Отзыв» можно добавить статус approved или rejected. Это позволит более гибко управлять контентом и автоматизировать процессы.

Создание и использование собственного post status открывает новые возможности для бизнес-логики и контроля контента без дополнительных плагинов.

Регистрация собственного post status в WordPress

Для добавления собственного статуса используется функция register_post_status. Обычно это делают в файле functions.php вашей темы или в плагине.

Пример регистрации статуса wp_tests_review с названием «На проверке»:

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

Пояснения к параметрам:

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

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

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

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

Для этого применим JavaScript, который добавит наш статус в селектор статусов:

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

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

Чтобы добавить пункт фильтра в админ-панель, используем хук restrict_manage_posts:

function wptests_add_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="wp_tests_review" <?php selected($status, 'wp_tests_review'); ?>>На проверке</option>
    </select>
    <?php
}
add_action('restrict_manage_posts', 'wptests_add_status_filter');

Примеры практического применения post status

Рассмотрим несколько сценариев, где собственный статус очень полезен.

1. Автоматизация публикации статей после проверки

Можно создать статус wp_tests_review для статей, которые должны пройти проверку редактором. После одобрения статус меняется на publish.

Пример кода для автоматической смены статуса по событию:

function wptests_approve_post($post_id) {
    $post = get_post($post_id);
    if ($post->post_status === 'wp_tests_review') {
        wp_update_post(array(
            'ID' => $post_id,
            'post_status' => 'publish'
        ));
    }
}
// Можно привязать к кастомному AJAX-запросу или кнопке в админке

2. Использование post status для кастомных типов записей

Если у вас есть кастомный тип записей, например, «Отзывы», можно добавить статусы approved, rejected и pending_review для удобного контроля модерации.

Пример регистрации статуса для кастомных отзывов:

register_post_status('wptests_approved', array(
    'label' => _x('Одобрен', 'post'),
    'public' => true,
    'show_in_admin_all_list' => true,
    'show_in_admin_status_list' => true,
));

3. Интеграция с плагинами и расширениями

Например, плагин WPRemark для отзывов может использовать собственные статусы для фильтрации отзывов по состоянию модерации.

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

Особенности и рекомендации при работе с post status

При работе с собственными статусами важно помнить несколько моментов:

  • Обязательно регистрируйте статус на хук init, чтобы WordPress его корректно распознал.
  • Если статус публичный, записи с ним будут доступны на сайте, поэтому позаботьтесь о логике отображения.
  • Добавляйте поддержку в админку — иначе редакторы могут не видеть или не выбирать ваш статус.
  • Для комплексных решений используйте фильтры и хуки WordPress, чтобы автоматизировать смену статусов и интеграцию с другими системами.

Заключение

Post status — мощный инструмент для управления контентом в WordPress. Создавая собственные статусы, вы получаете гибкость и контроль над жизненным циклом записей, что особенно важно для крупных проектов и сайтов с нестандартной логикой.

Для расширения функционала рекомендую ознакомиться с плагином Clearfy Pro, который помогает управлять оптимизацией и безопасностью, а также может пригодиться при работе с кастомными статусами.

WooCommerce: SKU не обновляется при смене вариации товара — как исправить
28.04.2026
Как отключить Emoji в WordPress для ускорения сайта
19.04.2026
WooCommerce: автоматическое отслеживание и изменение стоимости товаров при сменах вариаций
01.06.2026
Как использовать WPCommunity для создания социальной сети на WordPress
29.01.2026
Как удалить временные черты в WordPress программно
03.03.2026