I just added the following filter in my theme functions.php
file:
function change_the_title() {
return 'My modified title';
}
add_filter('wp_title', 'change_the_title');
And in my 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();?>>
Then, I found the title of my page did NOT change! And the title tag was injected in the wp_head
function.
More, if I call the function wp_title
manually in the header, it does return the expected value.
What's the matter? How can I work around it?
Addition: My WordPress version is 4.4.
you are missing
title
in yourhead
tag, Add In<head>
tag<title><?php wp_title('|', true, 'left'); ?></title>
your wp_filter will work normally.Not sure if its necessary to inject the variable, but try this.
I finally found out that the WordPress core code was changed, see the below piece of code.
So, after 4.4, the core do not inject the
wp_title
result into the header<title>
tag, but do the same thing with a new functionwp_get_document_title
.So instead, we can do the same thing by:
1. change the title directly:
2. filtering the title parts:
For more, see the details here: https://developer.wordpress.org/reference/functions/wp_get_document_title/