Every WordPress page can be described as having two titles:
-
The page/post title, which is displayed within the page/post via the
the_title()function call -
The html
<title></title>tag that displays the title on top of the browser
I am writing a plugin which at one point should change the title of a page dynamically (well, it should change both titles described above).
So, for step 1 above, I found multiple solutions on Stack Overflow (such as this or this). Those are great for only step 1 above.
For step 2, I found this solution; in a nutshell, this is how it works:
add_filter('wp_title', 'change_page_title');
function change_page_title ($title) {
// Do some magic, and eventually modify $title then return it
return $title;
}
But the suggested solution is not working for me; and by not working I mean that the filter is not calling the associated function. I am not sure what the problem is; is it because this filter is being called from within the plugin not the theme? (Just FYI, I do not have access to the theme files, so it has to be done from within the plugin).
How can I accomplish this? How can I change the browser title of a page dynamically from within a plugin?
Thanks.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
A post or page has only one title, the title tag <title> is the document title.
The filter wp_title filters the output of wp_title() function, which was used before to output the title of the document. In WordPress 4.1, the title-tag support in themes was introduced and wp_get_document_title() is used instead of wp_title(). So, if your theme supports title-tag, wp_title filter has not effect, but you can use a other filters:
pre_get_document_title to set a new title
add_filter( 'pre_get_document_title', 'cyb_change_page_title' );
function cyb_change_page_title () {
return "Custom title";
}
document_title_separator to filter the title separator
add_filter('document_title_separator', 'cyb_change_document_title_separator');
function cyb_change_document_title_separator ( $sep ) {
return "|";
}
documente_title_parts to filter different parts of the title: title, page number, tagline and site name.
add_filter( 'document_title_parts', 'cyb_change_document_title_parts' );
function cyb_change_document_title_parts ( $title_parts ) {
$title_parts['title'] = 'Custom title';
$title_parts['page'] = 54;
$title_parts['tagline'] = "Custom tagline";
$title_parts['site'] = "My Site"; // When not on home page
return $title_parts;
}
PD: You can use current_theme_supports( 'title-tag' ) to check if theme supports title-tag or not.
Method 2
Using this code on you page.php or page which you want to change
<pre>
<title><?php wp_title(); ?> | <?php bloginfo(‘name’); ?></title>
</pre>
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0