wp-code.ru wordpress WP-Codе

Создание и использование пользовательских статусов записей в WordPress

В WordPress есть стандартные статусы записей: publish, draft, pending и другие. Но иногда их недостаточно для решения конкретных задач, например, для организации сложного бизнес-процесса, где требуется промежуточное состояние записи. В этой статье подробно разберём, как создать и использовать пользовательские статусы записей (custom post statuses) с примерами кода.

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

Пользовательские статусы позволяют расширить стандартные статусы публикаций, добавляя свои уникальные состояния. Это удобно, если вы хотите, например, добавить статус «На проверке редактором», «В работе» или «Архивный». Такие статусы помогут визуально структурировать контент в админке и управлять поведением записей.

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

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

Для создания пользовательского статуса нужно использовать хук register_post_status. Рассмотрим на примере статуса wpcode_review с названием «На проверке».

function wpcode_register_custom_post_status() {
    register_post_status('wpcode_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', 'wpcode_register_custom_post_status');

Объяснение параметров:

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

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

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

function wpcode_add_custom_post_status_to_filters() {
    global $post_type, $pagenow;

    if ($post_type === 'post' && $pagenow === 'edit.php') {
        $status = isset($_GET['post_status']) ? $_GET['post_status'] : '';
        $count = wp_count_posts('post')->wpcode_review ?? 0;
        $class = ($status === 'wpcode_review') ? 'current' : '';
        echo "<a href='edit.php?post_status=wpcode_review&post_type=post' class='$class'>На проверке <span class='count'>($count)</span></a>";
    }
}
add_action('restrict_manage_posts', 'wpcode_add_custom_post_status_to_filters');

Так администратор сможет легко фильтровать записи по новому статусу.

Использование пользовательского статуса в коде и UI

Вы можете назначать статус записи при программном создании или обновлении:

$post_id = wp_insert_post(array(
    'post_title'  => 'Новая запись для проверки',
    'post_status' => 'wpcode_review',
    'post_type'   => 'post'
));

Также можно добавить кнопку или пункт меню для смены статуса через админку, используя post_submitbox_misc_actions и save_post.

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

function wpcode_add_status_button() {
    global $post;
    if ($post->post_status !== 'wpcode_review') {
        echo '<div class="misc-pub-section">'
           . '<button type="submit" name="wpcode_set_review" class="button">Отправить на проверку</button>'
           . '</div>';
    }
}
add_action('post_submitbox_misc_actions', 'wpcode_add_status_button');

function wpcode_handle_status_button($post_id) {
    if (isset($_POST['wpcode_set_review'])) {
        remove_action('save_post', 'wpcode_handle_status_button'); // чтобы избежать бесконечного цикла
        wp_update_post(array(
            'ID' => $post_id,
            'post_status' => 'wpcode_review'
        ));
    }
}
add_action('save_post', 'wpcode_handle_status_button');

Советы по использованию и интеграции с плагинами

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

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

Выводы и рекомендации

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

Реализация через register_post_status проста и не требует сторонних плагинов, а расширения в админке с помощью хуков делают работу удобной и наглядной.

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

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше