Как мне изменить тег на странице архивов категории?

Вопрос или проблема

Я использую шаблон 2016 года, и он использует wp_head() для рендеринга тега заголовка. Поэтому на страницах категорий он отображает

 Статьи о: что угодно

Как мне это изменить?

ИЗМЕНЕНИЕ: Я в конце концов сделал эту хакерскую уловку. Которую я ненавижу…

remove_action( 'wp_head', '_wp_render_title_tag', 1 );
add_action( 'wp_head', '_wp_render_title_tag_jch', 1 );

function _wp_render_title_tag_jch() {
    if ( did_action( 'wp_head' ) || doing_action( 'wp_head' ) ) {     
       $t = wp_get_document_title();
       if( strpos($t, 'Weekly Updates',0) >= 0 )
          echo( '' . 'Weekly Updates - Example Site' . '' . "\n");
        else
          echo( '' . $t . '' . "\n");              
    }
}

Стандартные темы WordPress, такие как Twenty Sixteen и Twenty Twenty-One, используют автоматическую <title> тега (или поддержку title-tag темы), введенную в WordPress 4.1, так что с этой функцией, если вы хотите изменить заголовок, вам потребуется использовать document_title_parts хук:

add_filter( 'document_title_parts', 'my_document_title_parts' );
function my_document_title_parts( $title ) { // $title - это *массив*
    if ( is_category() ) {
        $title['title'] = 'Записи в ' . single_cat_title( '', false );
    }

    return $title;
}

ОБНОВЛЕНИЕ

На самом деле, глядя на код (или уродливую уловку) в отредактированном вопросе, я думаю, что мой пример кода выше не сработал, потому что is_category() вернул false, и, вероятно, это потому что “Weekly Updates” является страницей (пост типа page), а не на самом деле архивом категории по адресу /category/<category slug>, например example.com/category/uncategorized.

Так что позвольте сказать так: Для тем, таких как Twenty Sixteen, которые поддерживают title-tag, вы должны использовать хук document_title_parts для фильтрации значения заголовка, т.е. <title>ЭТА ЧАСТЬ</title>. Но что касается самого кода, который изменяет заголовок, это будет зависеть от вас, как вы напишете свой код.

Тем не менее, попробуйте это (и обязательно удалите уродливую уловку из вашего кода):

add_filter( 'document_title_parts', 'my_document_title_parts' );
function my_document_title_parts( $title ) {
    if ( false !== strpos( $title['title'], 'Weekly Updates' ) ) {
        $title['title'] = 'Weekly Updates';
    }

    return $title;
}
/* ЗАМЕТКА: Попробуйте использовать большее значение в качестве приоритета обратного вызова, если стандартный (10)
 * не работает - пример с 9999 в качестве приоритета:
add_filter( 'document_title_parts', 'my_document_title_parts', 9999 );
*/

И обратите внимание, что хук имеет один параметр, который является $title, и это массив, состоящий из (но не ограничивающийся всеми элементами, присутствующими на всех страницах):

  • ‘title’
    (строка) Заголовок просмотренной страницы.
  • ‘page’
    (строка) Необязательно. Номер страницы, если есть пагинация.
  • ‘tagline’
    (строка) Необязательно. Описание сайта на главной странице.
  • ‘site’
    (строка) Необязательно. Заголовок сайта, когда не на главной странице.

Кроме того, если вы хотите изменить разделитель заголовка (например, -), вы можете использовать document_title_separator фильтр.

Ответ или решение

Чтобы изменить тег <title> на странице архивов категорий в WordPress, использующем тему 2016, вам следует воспользоваться хук-фильтром document_title_parts, который был введён в версии WordPress 4.1. Это позволяет гибко настраивать заголовки страниц, включая страницы категорий, без необходимости в применения "хаков", которые могут негативно сказаться на производительности и стабильности вашего сайта.

Общая информация

По умолчанию, темы, карты на WordPress, такие как Twenty Sixteen, используют функцию wp_head() для рендеринга тега <title>. Если вам нужно изменить текст, отображаемый в этом теге на страницах архивов категорий, вы можете использовать следующий подход.

Реализация

Вам нужно добавить следующий код в файл functions.php вашей темы:

add_filter('document_title_parts', 'my_document_title_parts');

function my_document_title_parts($title) {
    if (is_category()) {
        // Получаем название текущей категории
        $category_name = single_cat_title('', false);

        // Задаем новое значение для заголовка
        $title['title'] = 'Статьи о: ' . $category_name;
    }

    // Возвращаем измененные заголовки
    return $title;
}

Как это работает

  1. Использование фильтра: Вы добавляете фильтр document_title_parts, который перехватывает массив заголовков. Этот массив содержит различные части заголовка, включая основной заголовок страницы.

  2. Проверка категории: С помощью функции is_category() вы проверяете, находится ли пользователь на странице категории.

  3. Изменение заголовка: Используя single_cat_title(), вы получаете имя текущей категории и задаете новое значение заголовка, которое будет отображаться в теге <title>.

  4. Возврат измененного массива: Код завершает свою работу, возвращая измененный массив, который будет использован для отображения в теге <title>.

Дополнительные настройки

Если вы хотите изменить разделитель заголовка, например, между заголовком и подзаголовком, вы можете использовать фильтр document_title_separator:

add_filter('document_title_separator', 'my_document_title_separator');

function my_document_title_separator($sep) {
    return '|'; // Замените на нужный вам разделитель
}

Заключение

С помощью описанных методов вы сможете значительно улучшить SEO-оптимизацию и пользовательский опыт вашего сайта, правильно определяя заголовки страниц для SEO и навигации. Избавьтесь от "хаков", которых стоит избегать, и вместо этого используйте мощные функции, предоставляемые WordPress.

Оцените материал
Добавить комментарий

Капча загружается...