WordPress добавляет в title тэг код и мусор. Решение проблемы.
Вопрос:
Есть сайт на Вордпресс. В тег Title попадает это <title><span class="page-title-label">Рубрика:</span> <span class="page-title-value"><span>Полезности</span></span></title>
. То есть там где надо выводится рубрика с названием точно так же <span class="page-title-label">Рубрика:</span> <span class="page-title-value"><span>Рубрика</span></span>
. Почему это дублируется в тайтле страницы категории?
Решение:
add_filter('document_title_parts', function($title) {
if (is_category()) {
// Удаляем HTML-теги из заголовка
$title['title'] = strip_tags($title['title']);
// Удаляем "Рубрика:" и лишние пробелы
$title['title'] = str_replace('Рубрика:', '', $title['title']);
$title['title'] = trim($title['title']);
}
return $title;
}, 10, 1);
Вопрос:
Mо;но ли написать простой костыль ?
Решение:
add_filter('document_title_parts', function($title) {
if (is_category()) {
// Удаляем HTML-теги из заголовка
$title['title'] = strip_tags($title['title']);
// Удаляем "Рубрика:" и лишние пробелы
$title['title'] = str_replace('Рубрика:', '', $title['title']);
$title['title'] = trim($title['title']);
}
return $title;
}, 10, 1);
Вопрос:
«Этот код должен быть в ставлен страницу вывода категорий?
Ответ:
Этот код не нужно вставлять непосредственно в страницу вывода категорий (например, в category.php
или archive.php
). Он предназначен для работы на уровне всей темы WordPress и должен быть добавлен в файл functions.php
вашей дочерней темы. Это фильтр, который модифицирует тег <title>
для всех страниц категорий. Вот пошаговое руководство:
Как применить код:
- Создайте дочернюю тему (если еще не создана)
- Дочерняя тема нужна, чтобы изменения не потерялись при обновлении основной темы.
- Создайте папку, например,
my-theme-child
вwp-content/themes/
. - В ней создайте файл
style.css
с таким содержимым:/* Theme Name: My Theme Child Template: my-theme */
(Замените
my-theme
на название папки вашей основной темы.) - Создайте файл
functions.php
в той же папке.
- Добавьте код в
functions.php
- Откройте файл
functions.php
дочерней темы (например,wp-content/themes/my-theme-child/functions.php
). - Вставьте следующий код:
<?php add_filter('document_title_parts', function($title) { if (is_category()) { // Удаляем HTML-теги из заголовка $title['title'] = strip_tags($title['title']); // Удаляем "Рубрика:" и лишние пробелы $title['title'] = str_replace('Рубрика:', '', $title['title']); $title['title'] = trim($title['title']); } return $title; }, 10, 1); ?>
- Сохраните файл.
- Откройте файл
- Активируйте дочернюю тему
- Зайдите в админ-панель WordPress: Внешний вид → Темы.
- Активируйте вашу дочернюю тему (например, «My Theme Child»).
- Проверьте результат
- Откройте любую страницу категории на сайте.
- Нажмите правой кнопкой мыши → Просмотреть код страницы.
- Найдите тег
<title>
— он должен выглядеть, например, как<title>Полезности - Название сайта</title>
, без<span>
и «Рубрика:».
Почему не в шаблон категории?
- Фильтр
document_title_parts
работает глобально и изменяет тег<title>
для всех страниц категорий, независимо от шаблона (category.php
,archive.php
и т.д.). - Если вставить этот код напрямую в
category.php
, он не сработает корректно, так как тег<title>
формируется вheader.php
или через ядро WordPress, а не в шаблоне категории.
Возможные причины:
- Если у вас есть плагин кэширования (например, WP Super Cache), очистите кэш после добавления кода.
- Если проблема не решилась, проверьте, не добавляет ли ваша тема или плагин SEO (Yoast, Rank Math) лишний текст в
<title>
. Можете временно отключить SEO-плагин для теста.
Этот «костыль» прост и эффективен, он уберет <span>
и «Рубрика:» из тега <title>
на всех страницах категорий.