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

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

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

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

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

Регистрация пользовательского статуса записи в WordPress

Для создания нового статуса используется функция register_post_status(). Она регистрирует статус с набором параметров, которые определяют его поведение в админке и на фронтенде.

Рассмотрим пример регистрации статуса wpcoder_review — «На рассмотрении».

function wpcoder_register_post_status() {
    register_post_status('wpcoder_review', array(
        'label'                     => _x('На рассмотрении', 'post status'),
        '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', 'wpcoder_register_post_status');

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

  • label — Название статуса в интерфейсе.
  • public — Позволяет ли статус отображаться на сайте.
  • exclude_from_search — Исключать ли записи со статусом из поиска.
  • show_in_admin_all_list — Показать ли записи со статусом в списке «Все записи».
  • show_in_admin_status_list — Добавить ли статус в фильтры по статусам в админке.
  • label_count — Формат текста с количеством записей.

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

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

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

function wpcoder_append_post_status_list() {
    global $post;
    $complete = '';
    $label = '';
    if ($post->post_status == 'wpcoder_review') {
        $complete = ' selected="selected"';
        $label = '<span id="post-status-display"> На рассмотрении</span>';
    }
    echo "<script>
        jQuery(document).ready(function($){
            $("#post_status").append('<option value="wpcoder_review"' + '{$complete}' + '>На рассмотрении</option>');
            $(".misc-pub-section label").append('{$label}');
        });
    </script>";
}
add_action('post_submitbox_misc_actions', 'wpcoder_append_post_status_list');

Этот код добавит новый статус в селектор и отобразит текущий статус для уже сохранённых записей.

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

Чтобы вывести на сайте записи с вашим новым статусом, нужно добавить параметр post_status в WP_Query. Например:

$args = array(
    'post_type'   => 'post',
    'post_status' => 'wpcoder_review',
    '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>';
        the_excerpt();
    }
}
wp_reset_postdata();

Если статус публичный, то записи с ним можно показывать посетителям сайта. В противном случае — доступ к ним ограничен.

Практические советы и совместимость с плагинами

1. Некоторые плагины кеширования и SEO могут не учитывать пользовательские статусы, поэтому проверьте совместимость и при необходимости добавьте поддержку.

2. Плагин Clearfy Pro помогает управлять статусами и оптимизировать работу с ними, стоит обратить внимание, если требуется расширенная функциональность.

3. При работе с REST API для пользовательских статусов нужно добавить поддержку в запросах, чтобы обеспечить правильное отображение и фильтрацию.

4. В интерфейсе админки можно создавать пользовательские фильтры по новым статусам, используя хук restrict_manage_posts и добавляя соответствующие параметры запроса.

Как добавить фильтр по пользовательскому статусу в админке WordPress

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

function wpcoder_filter_post_status() {
    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="wpcoder_review" <?php selected($status, 'wpcoder_review'); ?>>На рассмотрении</option>
    </select>
    <?php
}
add_action('restrict_manage_posts', 'wpcoder_filter_post_status');

После этого при выборе статуса будет фильтроваться список записей.

Вывод

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

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

Автоматическое удаление неиспользуемых метаполей в WordPress
22.03.2026
Автоматический импорт данных из Excel в WordPress: практическое руководство
25.03.2026
Как использовать хук pre_get_posts для фильтрации записей в WordPress
20.04.2026
Автоматическое сохранение и обновление мета-полей при изменении записи в WordPress
19.12.2025
WooCommerce: автоматическая смена статуса заказа при отсутствии оплаты
19.05.2026