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_, чтобы избежать конфликтов с другими плагинами и темами.