WordPress 4.4+: фильтр wp_title не влияет на тег `<title>`

Я просто добавляю следующий фильтр в свой файл functions.php темы:

 function change_the_title() { return 'My modified title'; } add_filter('wp_title', 'change_the_title'); 

И в моем header.php :

 <!DOCTYPE html> <html <?php language_attributes(); ?>> <head> <meta charset="<?php bloginfo( 'charset' ); ?>"> <meta id="viewport" name="viewport" content="width=device-width"> <link rel="profile" href="http://gmpg.org/xfn/11"> <link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>"> <?php wp_head(); ?> </head> <body <?php body_class();?>> 

Затем я обнаружил, что название моей страницы не изменилось! И тег title был введен в функцию wp_head .

Более того, если я вызову функцию wp_title вручную в заголовке, она вернет ожидаемое значение.

Что случилось? Как я могу обойти это?


Дополнение: Моей версией WordPress является 4.4.

Наконец, я узнал, что код ядра wordpress был изменен, см. Ниже фрагмент кода.

 /** * Displays title tag with content. * * @ignore * @since 4.1.0 * @since 4.4.0 Improved title output replaced `wp_title()`. * @access private */ function _wp_render_title_tag() { if ( ! current_theme_supports( 'title-tag' ) ) { return; } echo '<title>' . wp_get_document_title() . '</title>' . "\n"; } 

Таким образом, после 4.4 ядро ​​не вводит результат wp_title в <title> заголовка <title> , но делает то же самое с новой функцией wp_get_document_title .

Поэтому вместо этого мы можем сделать то же самое:

1. изменить название напрямую:

 add_filter('pre_get_document_title', 'change_the_title'); function change_the_title() { return 'The expected title'; } 

2. Фильтрация титульных частей:

 add_filter('document_title_parts', 'filter_title_part'); function filter_title_part($title) { return array('a', 'b', 'c'); } 

Подробнее см. Здесь: https://developer.wordpress.org/reference/functions/wp_get_document_title/

PS: Взгляд в источник функции wp_get_document_title – хорошая идея, крючки внутри которой много говорят.

Не уверен, нужно ли его вводить переменную, но попробуйте это.

 function change_the_title($title) { return 'My modified title'; } add_filter('wp_title', 'change_the_title'); 

вам не хватает title в теге head , Add In <head> tag

<title><?php wp_title('|', true, 'left'); ?></title> <title><?php wp_title('|', true, 'left'); ?></title> ваш wp_filter будет работать нормально.