Получение ссылки на архив постов в WordPress
Функция get_post_type_archive_link() (доступна с версии WP 3.1.0) позволяет получить постоянную ссылку на архив для определенного типа постов.
Использование функции
Синтаксис
get_post_type_archive_link( $post_type );
Параметры
$post_type(строка, обязательный) — название типа поста.
Пример использования
Предположим, мы создали пользовательский тип поста с названием book с помощью функции register_post_type(). Чтобы отобразить ссылку на архивный страницу этого типа (страницу, где собраны все посты данного типа), используем следующий код:
Книги
Возвращаемое значение
Функция возвращает строку с маршрутом на архив типа постов или false, если тип поста не существует или у него нет архива.
Заметки
- Используется глобальный объект
WP_Rewrite, который отвечает за перезапись URL в WordPress.
Примеры кода
Вот полная реализация функции get_post_type_archive_link() из файла wp-includes/link-template.php:
function get_post_type_archive_link( $post_type ) {
global $wp_rewrite;
$post_type_obj = get_post_type_object( $post_type );
if ( ! $post_type_obj ) {
return false;
}
if ( 'post' === $post_type ) {
$show_on_front = get_option( 'show_on_front' );
$page_for_posts = get_option( 'page_for_posts' );
if ( 'page' === $show_on_front && $page_for_posts ) {
$link = get_permalink( $page_for_posts );
} else {
$link = get_home_url();
}
return apply_filters( 'post_type_archive_link', $link, $post_type );
}
if ( ! $post_type_obj->has_archive ) {
return false;
}
if ( get_option( 'permalink_structure' ) && is_array( $post_type_obj->rewrite ) ) {
$struct = ( true === $post_type_obj->has_archive ) ? $post_type_obj->rewrite['slug'] : $post_type_obj->has_archive;
if ( $post_type_obj->rewrite['with_front'] ) {
$struct = $wp_rewrite->front . $struct;
} else {
$struct = $wp_rewrite->root . $struct;
}
$link = home_url( user_trailingslashit( $struct, 'post_type_archive' ) );
} else {
$link = home_url( '?post_type=' . $post_type );
}
return apply_filters( 'post_type_archive_link', $link, $post_type );
}
Изменения в версиях
- С версии 3.1.0 — введена функция.
- С версии 4.5.0 — добавлена поддержка для постов.
Связанные функции
get_the_archive_title()— получает заголовок архива.is_archive()— проверяет, является ли текущая страница архивом.is_post_type_archive()— проверяет, является ли текущая страница архивом для типа поста.post_type_archive_title()— выводит заголовок архива постов.the_archive_title()— выводит заголовок текущего архива.
Эти функции могут помочь вам работать с архивами постов в WordPress и предоставляют дополнительные возможности для настройки ваших страниц.