Проверка Архива Пользовательского Типа Записей в WordPress: is_post_type_archive()
Обзор Функции
Функция is_post_type_archive() проверяет, находится ли текущий пользователь на странице архива пользовательского типа записей. Страница архива — это та страница, которая отображает все записи данного типа. Например, если вы создали пользовательский тип записей "книга", то страница архива может выглядеть так: /book/.
Важно понимать, что данная функция возвращает true только для страниц, которые являются архивами всех записей определенного типа. Она не проверяет наличие параметра запроса post_type. Этот параметр можно получить с помощью функции get_query_var('post_type').
Функция также работает в административной панели на страницах с таблицей постов.
Основные Характеристики
- Возвращаемые значения:
trueилиfalse. Если это страница архива с записями любого типа, функция вернётtrue. В противном случае —false. - Используется в:
is_shop() - Производительность: Быстрая: 0.00003 секунды для 1 вызова, 0.03 секунды для 50,000 вызовов.
Как Использовать Функцию
Функция is_post_type_archive() может быть использована следующим образом:
if ( is_post_type_archive( $post_types ) ) {
// Ваш код здесь
}
Параметры
$post_types(строка или массив строк) — тип записи или массив типов записей, против которых происходит проверка. По умолчанию: пустая строка.
Примеры Использования
Пример 1: Проверка Архива Пользовательского Типа Записей
В этом примере мы проверяем, является ли текущая страница архивом пользовательского типа записей, и выводим заголовок этого типа:
if ( is_post_type_archive() ) {
?>
Пример 2: Изменение Основного Запроса на Странице Архива
Функция is_post_type_archive() проверяет страницы архивов только для указанных типов записей. Если нужно обработать любой запрос страниц архива пользовательского типа записей, н��пример, для категорий пользовательских записей, используйте следующий код:
add_action( 'pre_get_posts', 'wpdocs_my_function' );
function wpdocs_my_function( $query ) {
if (
is_post_type_archive( 'my_custom_post_type' ) &&
'my_custom_post_type' === $query->query['post_type']
) {
// Ваш код здесь
}
}
Примечания
- Функция использует глобальный объект
WP_Query. Убедитесь, что он установлен перед вызовом функции, иначе она вернётfalse.
Код Функции
Вот код самой функции is_post_type_archive():
function is_post_type_archive( $post_types = '' ) {
global $wp_query;
if ( ! isset( $wp_query ) ) {
_doing_it_wrong( __FUNCTION__, __( 'Условные теги не работают до выполнения запроса. На этом этапе они всегда возвращают false.' ), '3.1.0' );
return false;
}
return $wp_query->is_post_type_archive( $post_types );
}
Итог
Функция is_post_type_archive() полезна для проверки, находитесь ли вы на странице архива пользовательского типа записей. Она проста в использовании и может значительно упростить работу с пользовательскими записями в WordPress.