Функция REGISTER_POST_STATUS() в WordPress: синтаксис, параметры и примеры использования

# Функция REGISTER_POST_STATUS() в WordPress

## Введение

Функция register_post_status() позволяет зарегистрировать новый статус для поста в WordPress. Важно вызывать эту функцию только после инициализации WordPress.

Эта функция помогает вам создать или изменить статус поста, используя переданные параметры. Вы можете использовать как строку для имени статуса, так и массив с дополнительными аргументами (второй параметр, который является необязательным).

Обратите внимание, что аргументы, начинающиеся с символа подчеркивания (_), не должны использоваться в плагинах и темах.

## Возврат

Функция возвращает объект, представляющий статус поста.

## Синтаксис

```php
register_post_status( $post_status, $args );

Параметры:

  • $post_status (строка) — Обязательный параметр. Имя статуса поста.

  • $args (массив|строка) — Необязательный параметр. Массив или строка с аргументами для статуса поста. По умолчанию — пустой массив.

Доступные аргументы

Вот что можно использовать в массиве $args:

  • label (true|false|string)
    Описание для статуса поста, которое может быть переведено. По умолчанию — значение $post_status.

  • label_count (массив|false)
    Используется для предоставления единственного и множественного вариантов метки для подсчета. По умолчанию — false (используется одно и то же значение).

  • exclude_from_search (true|false)
    Исключать ли посты с этим статусом из результатов поиска. По умолчанию — значение переменной $internal.

  • _builtin (true|false)
    Является ли статус встроенным (т.е. предоставляемым ядром WordPress). По умолчанию — false.

  • public (true|false)
    Должны ли посты с этим статусом отображаться на сайте. По умолчанию — false.

  • internal (true|false)
    Для внутреннего использования только? По умолчанию — false.

  • protected (true|false)
    Должны ли посты с этим статусом быть защищенными? По умолчанию — false.

  • private (true|false)
    Должны ли посты с этим статусом быть приватными? По умолчанию — false.

  • publicly_queryable (true|false)
    Можно ли запрашивать посты с этим статусом публично? По умолчанию — то же, что и $public.

  • show_in_admin_all_list (true|false)
    Должны ли посты быть включены в элементы редактирования их типа поста? По умолчанию — наоборот значение $internal.

  • show_in_admin_status_list (true|false)
    Отображать ли в списке статусов с подсчетом постов в верхней части списка редактирования? По умолчанию — наоборот значение $internal.

  • date_floating (true|false)
    Должен ли пост иметь плавающую дату создания? По умолчанию — false.

Пример использования

Пример 1: Регистрация статуса поста «Непрочитанный»

Сначала необходимо зарегистрировать статус в действии init:

add_action( 'init', 'my_custom_post_status' );

function my_custom_post_status(){
    register_post_status( 'unread', 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( 'Непрочитанный (%s)', 'Непрочитанных (%s)' ),
    ) );
}

Пример 2: Максимальная длина ��ля $post_status

Хотя вы можете зарегистрировать статус поста с длиной более 20 символов, вы не сможете сохранить или обновить посты с таким статусом. Метод $wpdb->process_fields() сравнивает данные и возвращает false.

global $wpdb;
$res = $wpdb->get_col_length( $wpdb->posts, 'post_status' );
print_r( $res );
/*
Array
(
    [type] => char
    [length] => 20
)
*/

Замечания

  • Глобальный массив: $wp_post_statuses — новый объект статуса поста добавляется в этот массив.

changelog

  • С версии 3.0.0 — введена функция.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *