Вопрос или проблема
Я использую шаблон 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;
}
Как это работает
-
Использование фильтра: Вы добавляете фильтр
document_title_parts
, который перехватывает массив заголовков. Этот массив содержит различные части заголовка, включая основной заголовок страницы. -
Проверка категории: С помощью функции
is_category()
вы проверяете, находится ли пользователь на странице категории. -
Изменение заголовка: Используя
single_cat_title()
, вы получаете имя текущей категории и задаете новое значение заголовка, которое будет отображаться в теге<title>
. -
Возврат измененного массива: Код завершает свою работу, возвращая измененный массив, который будет использован для отображения в теге
<title>
.
Дополнительные настройки
Если вы хотите изменить разделитель заголовка, например, между заголовком и подзаголовком, вы можете использовать фильтр document_title_separator
:
add_filter('document_title_separator', 'my_document_title_separator');
function my_document_title_separator($sep) {
return '|'; // Замените на нужный вам разделитель
}
Заключение
С помощью описанных методов вы сможете значительно улучшить SEO-оптимизацию и пользовательский опыт вашего сайта, правильно определяя заголовки страниц для SEO и навигации. Избавьтесь от "хаков", которых стоит избегать, и вместо этого используйте мощные функции, предоставляемые WordPress.