Как использовать функцию wp_get_document_title() для создания заголовка страницы

wp_get_document_title() │ WP 4.4.0

Функция wp_get_document_title() возвращает заголовок документа для текущей страницы.

Использование

Эта функция работает вместе с другими функциями:

  • single_term_title()
  • single_post_title()
  • post_type_archive_title()

Время выполнения

  • 1 раз — 0.00042 сек (быстро)
  • 50000 раз — 15 сек (медленно)

Хуки от функции

  • pre_get_document_title
  • document_title_separator
  • document_title_parts
  • document_title

Возврат

Возвращает строку — тег с заголовком документа.

Пример использования

Для вызова функции просто напишите:

wp_get_document_title();

Демонстрация работы

Предположим, мы находимся на странице «Контакты»:

echo wp_get_document_title();
// вывод: Контакты - Название сайта

Заголовок страницы

Эта функция заменяет шаблонный тег wp_title(). Она используется в файле header.php для отображения заголовка любой страницы.

Пример реализации в HTML:


    
    

    <?php echo wp_get_document_title(); ?>

    

Вывод заголовка, используя фильтр

Допустим, мы хотим, чтобы на странице с ID 20 отображался наш собственный заголовок, например "Моя страница":

// Заголовок "Моя страница" будет отображен на странице с ID 20
add_filter( 'pre_get_document_title', function(){
    global $post;

    if( $post->ID != 20 ){
        return ''; // не изменяем ничего
    }

    return 'Моя страница';
} );

Переопределение функции

Вы можете написать свою собственную функцию и полностью заменить работу этой функции. Это можно сделать с помощью хука pre_get_document_title:

add_filter( 'pre_get_document_title', 'my_get_document_title' );

function my_get_document_title(){
    // Генерируем динамический заголовок для каждой страницы.
    $title = 'Это динамически сгенерированный заголовок';
    return $title;
}

Изменение разделителя между заголовком и названием сайта

По умолчанию функция добавляет разделитель " - " после заголовка и перед названием сайта. Вы можете изменить этот разделитель через фильтр:

add_filter( 'document_title_separator', function(){
    return ' | ';
} );

Удаление названия сайта в конце заголовка

На страницах с is_singular() к заголовкам добавляется название сайта, разделенное разделителем. Это не всегда нужно, и мы можем это исправить:

// Удалить название сайта в конце заголовка
add_filter( 'document_title_parts', function( $parts ){

    if( isset( $parts['site'] ) ){
        unset( $parts['site'] ); // убираем название сайта
    }

    return $parts;
} );

Удаление описания сайта из заголовка главной страницы

На главной странице отображается "Название сайта - описание сайта". Чтобы убрать описание и оставить только заголовок, используйте этот хук:

// убираем описание из заголовка для главной страницы
add_filter( 'document_title_parts', function( $title ){

    if( isset( $title['tagline'] ) ){
        unset( $title['tagline'] ); // убираем описание
    }

    return $title;
} );

Примечания

  • Глобальная переменная int $page — номер страницы одного поста.
  • Глобальная переменная int $paged — номер страницы списка постов.

Изменения

  • С версии 4.4.0 введена функция.

Код функции wp_get_document_title

function wp_get_document_title() {
    $title = apply_filters( 'pre_get_document_title', '' );
    if ( ! empty( $title ) ) {
        return $title;
    }

    global $page, $paged;

    $title = array(
        'title' => '',
    );

    if ( is_404() ) {
        $title['title'] = __( 'Страница не найдена' );
    } elseif ( is_search() ) {
        $title['title'] = sprintf( __( 'Результаты поиска для “%s”' ), get_search_query() );
    } elseif ( is_front_page() ) {
        $title['title'] = get_bloginfo( 'name', 'display' );
    } elseif ( is_post_type_archive() ) {
        $title['title'] = post_type_archive_title( '', false );
    } elseif ( is_tax() ) {
        $title['title'] = single_term_title( '', false );
    } elseif ( is_home() || is_singular() ) {
        $title['title'] = single_post_title( '', false );
    } elseif ( is_category() || is_tag() ) {
        $title['title'] = single_term_title( '', false );
    } elseif ( is_author() && get_queried_object() ) {
        $author         = get_queried_object();
        $title['title'] = $author->display_name;
    } elseif ( is_year() ) {
        $title['title'] = get_the_date( _x( 'Y', 'формат даты для годовых архивов' ) );
    } elseif ( is_month() ) {
        $title['title'] = get_the_date( _x( 'F Y', 'формат даты для месячных архивов' ) );
    } elseif ( is_day() ) {
        $title['title'] = get_the_date();
    }

    if ( ( $paged >= 2 || $page >= 2 ) && ! is_404() ) {
        $title['page'] = sprintf( __( 'Страница %s' ), max( $paged, $page ) );
    }

    if ( is_front_page() ) {
        $title['tagline'] = get_bloginfo( 'description', 'display' );
    } else {
        $title['site'] = get_bloginfo( 'name', 'display' );
    }

    $sep = apply_filters( 'document_title_separator', '-' );

    $title = apply_filters( 'document_title_parts', $title );

    $title = implode( " $sep ", array_filter( $title ) );

    $title = apply_filters( 'document_title', $title );

    return $title;
}

Эта функция генерирует заголовок для текущей страницы на основе различных условий. Вы можете настроить её под свои нужды, используя фильтры.

Leave a Reply

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