Получение ссылки на архив постов в WordPress: все о функции get_post_type_archive_link()

Получение ссылки на архив постов в 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 и предоставляют дополнительные возможности для настройки ваших страниц.

Leave a Reply

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