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> для всех страниц категорий. Вот пошаговое руководство:

Как применить код:

  1. Создайте дочернюю тему (если еще не создана)
    • Дочерняя тема нужна, чтобы изменения не потерялись при обновлении основной темы.
    • Создайте папку, например, my-theme-child в wp-content/themes/.
    • В ней создайте файл style.css с таким содержимым:
      /*
       Theme Name: My Theme Child
       Template: my-theme
      */
      

      (Замените my-theme на название папки вашей основной темы.)

    • Создайте файл functions.php в той же папке.
  2. Добавьте код в 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);
      ?>
      
    • Сохраните файл.
  3. Активируйте дочернюю тему
    • Зайдите в админ-панель WordPress: Внешний видТемы.
    • Активируйте вашу дочернюю тему (например, «My Theme Child»).
  4. Проверьте результат
    • Откройте любую страницу категории на сайте.
    • Нажмите правой кнопкой мыши → Просмотреть код страницы.
    • Найдите тег <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> на всех страницах категорий.

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

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