- Вопрос или проблема
- Ответ или решение
- Как создать пользовательский статус записи и отобразить его над таблицей вашего пользовательского типа записи
- 1. Регистрация пользовательского статуса
- 2. Добавление статуса к административному меню
- 3. Сохранение пользовательского статуса
- 4. Дополнительные советы и плагины
- Заключение
Вопрос или проблема
Как мне создать пользовательский статус поста и отобразить его над таблицей моего пользовательского типа поста?
Пример:
Все(9) | Опубликовано (7) | Пользовательский_Статус(2)
Я использовал плагин advanced custom fields, чтобы создать выпадающий список, который представляет статус поста. Но я уверен, что это не отражает фактический статус поста, так как он не будет сохранен в колонке post_status
в базе данных.
Не стесняйтесь предлагать плагины. Я пробовал плагин edit flow, но это как-то неудобно, потому что каждый раз, когда я меняю статус моего поста, он будет отменять его публикацию.
Спасибо!
Вы можете использовать ответ, данный здесь:
Как добавить быстрые ссылки в меню Публикация|Запланировано|Корзина администраторов постов
Например, Стивен Харрис ответил на тот же вопрос, чтобы добавить дополнительный элемент меню для отображения постов за сегодня.
add_filter( 'views_edit-post', 'wpse_add_my_view');
function wpse_add_my_view($views){
global $post_type_object;
$post_type = $post_type_object->name;
$y =mysql2date('Y', current_time('mysql') );
$m =mysql2date('m', current_time('mysql') );
$d =mysql2date('d', current_time('mysql') );
$views['today'] = "<a href="https://wordpress.stackexchange.com/questions/127125/edit.php?year=$y&monthnum=$m&day=$d&post_type=$post_type">".__('Сегодня','myplugin')."</a>";
return $views;
}
.
Ответ или решение
Как создать пользовательский статус записи и отобразить его над таблицей вашего пользовательского типа записи
Создание пользовательского статуса записи в WordPress требует выполнения ряда шагов, начиная с регистрации статуса и заканчивая его отображением в админке. В этом ответе мы подробно разберем процесс создания пользовательского статуса и его визуализацию.
1. Регистрация пользовательского статуса
Пользовательский статус необходимо зарегистрировать с помощью функции register_post_status()
. Это делается в файле вашей темы или в плагине.
function my_custom_post_status() {
register_post_status( 'custom_status', array(
'label' => _x( 'Пользовательский статус', 'post status' ),
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'post_type' => array( 'your_custom_post_type' ),
'label_count' => _n_noop( 'Пользовательский статус <span class="count">(%s)</span>', 'Пользовательский статус <span class="count">(%s)</span>' )
));
}
add_action( 'init', 'my_custom_post_status' );
2. Добавление статуса к административному меню
Для отображения пользовательского статуса в админке, необходимо добавить его ссылку к существующим статусам. Это делается с помощью фильтра views_edit-post
.
add_filter( 'views_edit-your_custom_post_type', 'wpse_add_custom_view' );
function wpse_add_custom_view( $views ) {
$post_type = 'your_custom_post_type';
$status = 'custom_status'; // Ваш пользовательский статус
$count_posts = wp_count_posts( $post_type );
$custom_status_count = $count_posts->$status ?? 0; // Получение количества записей с вашим статусом
$views['custom_status'] = sprintf(
'<a href="%s">%s (%d)</a>',
admin_url( 'edit.php?post_type=' . $post_type . '&post_status=' . $status ),
_x( 'Пользовательский статус', 'post status' ),
$custom_status_count
);
return $views;
}
Этот код добавляет новую ссылку для пользовательского статуса с указанием количества записей, относящихся к этому статусу.
3. Сохранение пользовательского статуса
Если вы используете плагин Advanced Custom Fields для управления статусами, вам может потребоваться дополнительно сохранить эти статусы в post_status
. Это можно сделать в функции-сохранении вашего пользовательского поста:
function save_custom_post_status( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
if ( isset( $_POST['acf']['field_abc123'] ) ) { // Замените 'field_abc123' на ваш ключ поля ACF
$status = sanitize_text_field( $_POST['acf']['field_abc123'] );
if ( 'custom_status' === $status ) {
// Установите новый статус
wp_update_post( array( 'ID' => $post_id, 'post_status' => 'custom_status' ) );
}
}
}
add_action( 'save_post', 'save_custom_post_status' );
4. Дополнительные советы и плагины
Если вы ищете дополнительные плагины для управления статусами, рекомендую рассмотреть следующие:
- Custom Post Status: Позволяет создать собственные статусы, и все настройки доступны через пользовательский интерфейс.
- PublishPress: Мощный плагин, который позволяет управлять статусами и рабочими процессами публикации.
Заключение
Создание индивидуального пользовательского статуса и его отображение в админке WordPress требует сочетания регистрации статуса и обработки ссылок в меню. Используя указанные примеры, вы сможете легко интегрировать эти функции в свой проект. Помните, что следует делать резервные копии вашего сайта перед внесением изменений в код, чтобы избежать потери данных или сбоя функциональности.
Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать.