Администратор – создать пользовательский статус публикации и отобразить его над таблицей.

Вопрос или проблема

Как мне создать пользовательский статус поста и отобразить его над таблицей моего пользовательского типа поста?

Пример:

Все(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 требует сочетания регистрации статуса и обработки ссылок в меню. Используя указанные примеры, вы сможете легко интегрировать эти функции в свой проект. Помните, что следует делать резервные копии вашего сайта перед внесением изменений в код, чтобы избежать потери данных или сбоя функциональности.

Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать.

Оцените материал
Добавить комментарий

Капча загружается...