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 для расширенных возможностей.