Почему фильтр wp_title вообще не работает?

Я знаю, что есть и другие подобные вопросы, но не нашел надежного ответа. Так:

Сначала активируйте вещь (упрощенный код):

add_action( 'after_setup_theme', 'theme_setup' );
function theme_setup() {
  add_theme_support('title-tag');
}

Во-вторых, удалите тег title из header.php.

В-третьих, в шаблонах страниц перед вызовом get_header() добавьте что-то вроде этого:

  add_filter('wp_title', 'set_custom_title', 10, 3);
  function set_custom_title($title, $sep, $seplocation){
    return 'test';
  }

Ну, это вообще не работает в любом шаблоне, будь то страница, архив, пользовательская таксономия или архив типа записи. Нет, ничего. Wordpress сам генерирует заголовки.

Почему? Я делаю что-то неправильно? Обратите внимание, что этот код когда-то просто работал: использовался на других сайтах/темах.

Возможно, это проблема wp5.2.0?

добавьте этот код в header.php <title><?php wp_title('|', true, 'right'); ?> | <?php echo get_bloginfo('name') ?></title>

Vel 16.05.2019 10:38

@Vel, это работает, спасибо. Но довольно странно, так как когда-то это было нет-нет... Вам нужно было удалить тег заголовка из головы, чтобы заставить фильтр работать... Ба..

Luca Reghellin 16.05.2019 10:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
1 918
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Итак, благодаря @Vel, ответ состоит в том, чтобы повторно добавить тег заголовка (даже если в предыдущих версиях wp> не знаю, до какой версии вам пришлось вместо этого удалить его из заголовка).

Текущий рабочий код для меня:

//functions.php
add_action( 'after_setup_theme', 'theme_setup' );
function theme_setup() {
  add_theme_support('title-tag');
}

//header.php
<title><?php wp_title('|', true, 'right'); ?> | <?php echo get_bloginfo('name') ?></title>

//page templates
$window_title = // do something
add_filter('wp_title', function($title, $sep, $seplocation) use($window_title){ return $window_title; }, 10, 3);

Попробуйте использовать следующий код -

add_filter('document_title_parts', function($titles){
    return array('title' => 'Custom Title');
});

Пожалуйста, смотрите мой собственный ответ.

Luca Reghellin 16.05.2019 12:55

Для тех, у кого все еще есть эта проблема с неработающим фильтром wp_title, я бы предложил добавить более высокое значение приоритета. Более высокое значение приоритета гарантирует, что ваш фильтр будет выполнен и не будет переопределен другими фильтрами в вашей теме или установленными плагинами. См. ниже: (ссылка: https://developer.wordpress.org/reference/functions/add_filter/)

  // the 9999999 priority value will force this filter to be executed closer to the end.  A lower number corresponds with earlier execution
  add_filter('wp_title', 'set_custom_title', 9999999, 3);
  function set_custom_title($title, $sep, $seplocation){
    return 'test';
  }

Другие вопросы по теме