- Описание функции
- Примеры использования
- Регистрация нового статуса поста
- Изменение названия статуса поста
- Исключение постов с определенным статусом из результатов поиска
- Отображение постов с определенным статусом на фронтенде сайта
- Защита постов с определенным статусом
- Установка постов с определенным статусом как приватных
- Возможность публичного запроса постов с определенным статусом
- Отображение постов с определенным статусом в списке редактирования для их типа поста
- Отображение статусов с количеством постов в верхней части списка редактирования
- Установка плавающей даты создания поста
- Вопросы и ответы
- Как зарегистрировать новый статус записи?
- Как изменить название зарегистрированного статуса записи?
- Как исключить записи с определенным статусом из результатов поиска?
- Как определить, является ли статус записи встроенным?
- Как задать видимость записей с определенным статусом на фронтенде сайта?
- Как определить, что статус записи предназначен только для внутреннего использования?
- Как задать защиту для записей с определенным статусом?
- Как задать приватность для записей с определенным статусом?
- Как определить, можно ли публично запрашивать записи с определенным статусом?
- Связанные элементы
Описание функции
Функция register_post_status() регистрирует новый статус записи в WordPress. Она позволяет создавать пользовательские статусы записей, которые могут быть использованы для управления и отображения записей на сайте. Зарегистрированные статусы могут быть использованы для фильтрации записей в административной панели, а также для изменения поведения записей на фронтенде.
Использование
register_post_status( string $post_status, array|string $args = array() ): object Функция register_post_status() принимает два параметра: $post_status (обязательный) и $args (необязательный). Она возвращает объект, представляющий зарегистрированный статус записи.
$post_status(string, обязательный): Название статуса записи.$args(array|string, необязательный): Массив или строка аргументов статуса записи.label(bool|string): Описательное имя статуса записи, предназначенное для перевода. По умолчанию равно значению$post_status.label_count(array|false): Массив с единственной и множественной формой описания статуса записи для подсчета. По умолчанию равноfalse, что означает, что аргументlabelбудет использоваться для обоих форм описания.exclude_from_search(bool): Определяет, должны ли записи с этим статусом быть исключены из результатов поиска. По умолчанию равно значению$internal._builtin(bool): Определяет, является ли статус встроенным. Используется только в ядре WordPress. По умолчанию равноfalse.public(bool): Определяет, должны ли записи с этим статусом отображаться на фронтенде сайта. По умолчанию равноfalse.internal(bool): Определяет, предназначен ли статус только для внутреннего использования. По умолчанию равноfalse.protected(bool): Определяет, должны ли записи с этим статусом быть защищенными. По умолчанию равноfalse.private(bool): Определяет, должны ли записи с этим статусом быть приватными. По умолчанию равноfalse.publicly_queryable(bool): Определяет, должны ли записи с этим статусом быть доступными для публичного запроса. По умолчанию равно значению$public.show_in_admin_all_list(bool): Определяет, должны ли записи с этим статусом отображаться в списке редактирования их типа записи. По умолчанию противоположное значение$internal.show_in_admin_status_list(bool): Определяет, должен ли статус отображаться в списке статусов с подсчетом записей в верхней части списка редактирования, например: Все (12) | Опубликованные (9) | Мой пользовательский статус (2). По умолчанию противоположное значение$internal.date_floating(bool): Определяет, имеет ли запись плавающую дату создания. По умолчанию равноfalse.
Функция возвращает объект, представляющий зарегистрированный статус записи.
$args = array(
'label' => 'Мой статус',
'public' => true,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => array(
'singular' => 'Мой статус (%s)',
'plural' => 'Мои статусы (%s)'
)
);
register_post_status( 'my_status', $args );
В приведенном выше примере кода мы регистрируем новый статус записи с названием «my_status». Мы также указываем некоторые дополнительные параметры, такие как публичность статуса, отображение в списке редактирования записей и форматирование метки статуса для подсчета записей.
Примеры использования
Регистрация нового статуса поста
function wpdocs_register_custom_post_status() {
$args = array(
'label' => _x( 'Custom Status', 'post' ),
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( 'Custom Status (%s)', 'Custom Status (%s)' ),
);
register_post_status( 'custom_status', $args );
}
add_action( 'init', 'wpdocs_register_custom_post_status' );
В этом примере кода мы регистрируем новый статус поста с названием «Custom Status». Опция «public» установлена в значение «true», что означает, что посты с этим статусом будут отображаться на фронтенде сайта. Опция «exclude_from_search» установлена в значение «false», что означает, что посты с этим статусом будут включены в результаты поиска. Опция «show_in_admin_all_list» установлена в значение «true», что означает, что посты с этим статусом будут отображаться в списке редактирования для их типа поста. Опция «show_in_admin_status_list» установлена в значение «true», что означает, что статус будет отображаться в списке статусов с количеством постов в верхней части списка редактирования. Опция «label_count» используется для указания текста в единственном и множественном числе для статуса.
Изменение названия статуса поста
function wpdocs_change_custom_post_status_label() {
global $wp_post_statuses;
$wp_post_statuses['custom_status']->label = 'New Custom Status';
}
add_action( 'init', 'wpdocs_change_custom_post_status_label' );
В этом примере кода мы изменяем название статуса поста «Custom Status» на «New Custom Status». Для этого мы обращаемся к глобальной переменной «$wp_post_statuses» и изменяем значение свойства «label» для статуса «custom_status».
Исключение постов с определенным статусом из результатов поиска
function wpdocs_exclude_custom_post_status_from_search( $query ) {
if ( ! is_admin() && $query->is_main_query() ) {
$query->set( 'post_status', array( 'publish', 'custom_status' ) );
}
}
add_action( 'pre_get_posts', 'wpdocs_exclude_custom_post_status_from_search' );
В этом примере кода мы исключаем посты с статусом «custom_status» из результатов поиска. Для этого мы используем хук «pre_get_posts» и устанавливаем значение «post_status» в массиве параметров запроса.
Отображение постов с определенным статусом на фронтенде сайта
function wpdocs_show_custom_post_status_on_frontend( $query ) {
if ( ! is_admin() && $query->is_main_query() ) {
$query->set( 'post_status', array( 'publish', 'custom_status' ) );
}
}
add_action( 'pre_get_posts', 'wpdocs_show_custom_post_status_on_frontend' );
В этом примере кода мы отображаем посты с статусом «custom_status» на фронтенде сайта. Для этого мы используем хук «pre_get_posts» и устанавливаем значение «post_status» в массиве параметров запроса.
Защита постов с определенным статусом
function wpdocs_protect_custom_post_status( $protected, $post ) {
if ( 'custom_status' === $post->post_status ) {
$protected = true;
}
return $protected;
}
add_filter( 'protected_post_status', 'wpdocs_protect_custom_post_status', 10, 2 );
В этом примере кода мы защищаем посты с статусом «custom_status». Для этого мы используем фильтр «protected_post_status» и устанавливаем значение переменной «$protected» в «true» для постов с указанным статусом.
Установка постов с определенным статусом как приватных
function wpdocs_set_custom_post_status_as_private( $private, $post ) {
if ( 'custom_status' === $post->post_status ) {
$private = true;
}
return $private;
}
add_filter( 'private_post_status', 'wpdocs_set_custom_post_status_as_private', 10, 2 );
В этом примере кода мы устанавливаем посты с статусом «custom_status» как приватные. Для этого мы используем фильтр «private_post_status» и устанавливаем значение переменной «$private» в «true» для постов с указанным статусом.
Возможность публичного запроса постов с определенным статусом
function wpdocs_make_custom_post_status_publicly_queryable( $publicly_queryable, $post ) {
if ( 'custom_status' === $post->post_status ) {
$publicly_queryable = true;
}
return $publicly_queryable;
}
add_filter( 'publicly_queryable_post_status', 'wpdocs_make_custom_post_status_publicly_queryable', 10, 2 );
В этом примере кода мы разрешаем публичный запрос постов с статусом «custom_status». Для этого мы используем фильтр «publicly_queryable_post_status» и устанавливаем значение переменной «$publicly_queryable» в «true» для постов с указанным статусом.
Отображение постов с определенным статусом в списке редактирования для их типа поста
function wpdocs_show_custom_post_status_in_edit_listing( $statuses ) {
$statuses['custom_status'] = _x( 'Custom Status', 'post' );
return $statuses;
}
add_filter( 'display_post_states', 'wpdocs_show_custom_post_status_in_edit_listing' );
В этом примере кода мы отображаем статус «Custom Status» в списке редактирования для его типа поста. Для этого мы используем фильтр «display_post_states» и добавляем новый статус в массив «$statuses».
Отображение статусов с количеством постов в верхней части списка редактирования
function wpdocs_show_custom_post_status_with_counts( $views ) {
$args = array(
'post_type' => 'post',
'post_status' => 'custom_status',
'posts_per_page' => -1,
);
$count = new WP_Query( $args );
$count = $count->found_posts;
$views['custom_status'] = sprintf( __( 'Custom Status (%s)', 'textdomain' ), number_format_i18n( $count ) );
return $views;
}
add_filter( 'views_edit-post', 'wpdocs_show_custom_post_status_with_counts' );
В этом примере кода мы отображаем статус «Custom Status» с количеством постов в верхней части списка редактирования. Для этого мы используем фильтр «views_edit-post» и добавляем новый статус в массив «$views». Мы также используем функцию «WP_Query» для подсчета количества постов с указанным статусом.
Установка плавающей даты создания поста
function wpdocs_set_custom_post_status_date_floating( $date_floating, $post ) {
if ( 'custom_status' === $post->post_status ) {
$date_floating = true;
}
return $date_floating;
}
add_filter( 'date_floating_post_status', 'wpdocs_set_custom_post_status_date_floating', 10, 2 );
В этом примере кода мы устанавливаем плавающую дату создания для постов с статусом «custom_status». Для этого мы используем фильтр «date_floating_post_status» и устанавливаем значение переменной «$date_floating» в «true» для постов с указанным статусом.
Вопросы и ответы
Как зарегистрировать новый статус записи?
Для регистрации нового статуса записи в WordPress используется функция register_post_status(). Эта функция принимает два параметра: $post_status (обязательный) и $args (необязательный).
Параметр $post_status представляет собой строку и указывает имя нового статуса записи.
Параметр $args может быть массивом или строкой и содержит дополнительные аргументы для нового статуса записи.
register_post_status( 'my_custom_status', array(
'label' => 'My Custom Status',
'public' => true,
'show_in_admin_status_list' => true
) );
Как изменить название зарегистрированного статуса записи?
Название зарегистрированного статуса записи можно изменить, указав аргумент 'label' в массиве $args при регистрации статуса. Значение этого аргумента должно быть строкой, содержащей новое название статуса.
register_post_status( 'my_custom_status', array(
'label' => 'My New Custom Status'
) );
Как исключить записи с определенным статусом из результатов поиска?
Для исключения записей с определенным статусом из результатов поиска используется аргумент 'exclude_from_search' при регистрации статуса. Значение этого аргумента должно быть логическим (true или false).
register_post_status( 'my_custom_status', array(
'label' => 'My Custom Status',
'exclude_from_search' => true
) );
Как определить, является ли статус записи встроенным?
Для определения, является ли статус записи встроенным, можно использовать параметр _builtin. Если значение этого параметра равно true, то статус записи является встроенным, в противном случае — нет.
$status = 'draft';
$args = array(
'label' => 'Draft',
'_builtin' => true,
);
register_post_status( $status, $args );
Как задать видимость записей с определенным статусом на фронтенде сайта?
Для задания видимости записей с определенным статусом на фронтенде сайта используется параметр public. Если значение этого параметра равно true, то записи с данным статусом будут отображаться на фронтенде сайта, в противном случае — нет.
$status = 'private';
$args = array(
'label' => 'Private',
'public' => false,
);
register_post_status( $status, $args );
Как определить, что статус записи предназначен только для внутреннего использования?
Для определения, что статус записи предназначен только для внутреннего использования, используется параметр internal. Если значение этого параметра равно true, то статус записи является внутренним, в противном случае — нет.
$status = 'custom';
$args = array(
'label' => 'Custom',
'internal' => true,
);
register_post_status( $status, $args );
Как задать защиту для записей с определенным статусом?
Для задания защиты для записей с определенным статусом в WordPress используется функция register_post_status(). Параметр protected позволяет указать, должны ли записи с этим статусом быть защищенными.
Пример кода:
register_post_status( 'custom_status', array(
'protected' => true,
) );
Как задать приватность для записей с определенным статусом?
Для задания приватности для записей с определенным статусом в WordPress используется функция register_post_status(). Параметр private позволяет указать, должны ли записи с этим статусом быть приватными.
Пример кода:
register_post_status( 'custom_status', array(
'private' => true,
) );
Как определить, можно ли публично запрашивать записи с определенным статусом?
Для определения, можно ли публично запрашивать записи с определенным статусом в WordPress используется параметр publicly_queryable функции register_post_status(). Если значение параметра равно true, то записи с этим статусом могут быть запрошены публично.
Пример кода:
register_post_status( 'custom_status', array(
'publicly_queryable' => true,
) );
Функция
register_post_status()в WordPress позволяет зарегистрировать новый статус записи. Она предоставляет широкие возможности для настройки статуса, включая задание защиты и приватности, а также определение публичности запросов к записям с этим статусом. Используйте эту функцию для создания и управления собственными статусами записей в WordPress.
Связанные элементы
- Функция
get_post_statuses(): возвращает массив всех зарегистрированных статусов записей. - Функция
get_post_status_object(): возвращает объект статуса записи по его имени. - Хук
transition_post_status: вызывается при изменении статуса записи. - Хук
wp_insert_post_data: позволяет изменять данные записи перед их сохранением.