Проверка Архива Пользовательского Типа Записей в WordPress

Проверка Архива Пользовательского Типа Записей в 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.

Leave a Reply

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