Change title separator.
I’m working with the underscores starter theme. I want to make a small change to the title. Change the separator from
“Post title | site name” to “Post title – site name”
The simple way of doing this was to put
<title><?php wp_title('-', true, 'right' ); ?><?php bloginfo( 'name' ); ?></title>
in the header.
But now I read that with the introduction of add_theme_support( 'title-tag' );
one should not use the <title>
markup in the header.
So is there a simple way to change the separator in the title?
Why this question is different from other similar questions:
This is really about best practice, since the introduction of add_theme_support( 'title-tag' );
and how to use and modify it, since we are no longer supposed to use the <title>
tag in the header.
[ I really hope that I don’t have to write 8 lines of code to make such a small change.
If I decide to finally use the <title>
tag as a more straightforward solution, should I comment out/remove the add_theme_support( 'title-tag' );
from functions.php? ]
2 s
UPDATE for WordPress 4.4
Since WordPress 4.4 the wp_title
filter doesn’t work because wp_title()
function is not used in core anymore. That function was marked as deprecated, then reinstated until new notice but theme authors are discouraged from using it. Because of that, wp_title
filter still will work if you continue using wp_title()
function directly in your theme but it is not recommended.
There are new filters to customize the document title when theme support for title-tag
is enabled:
pre_get_document_title
document_title_parts
document_title_separator
.
As you only want to customize the separator, you can use document_title_separator
as follow:
add_filter( 'document_title_separator', 'cyb_document_title_separator' );
function cyb_document_title_separator( $sep ) {
$sep = "-";
return $sep;
}
Previous answer
You can use wp_title
filter to customize the <title>
tag.
add_filter( 'wp_title', 'customize_title_tag', 10, 3 );
function customize_title_tag( $title, $sep, $seplocation ) {
// Customize $title here.
// Example taken from https://generatepress.com/forums/topic/title-tag-separator/
$title = str_replace( '|', '-', $title );
return $title;
}
A more complex example of how to use this filter (taken from TwentyTwelve theme):
function twentytwelve_wp_title( $title, $sep ) {
global $paged, $page;
if ( is_feed() )
return $title;
// Add the site name.
$title .= get_bloginfo( 'name' );
// Add the site description for the home/front page.
$site_description = get_bloginfo( 'description', 'display' );
if ( $site_description && ( is_home() || is_front_page() ) )
$title = "$title $sep $site_description";
// Add a page number if necessary.
if ( $paged >= 2 || $page >= 2 )
$title = "$title $sep " . sprintf( __( 'Page %s', 'twentytwelve' ), max( $paged, $page ) );
return $title;
}
add_filter( 'wp_title', 'twentytwelve_wp_title', 10, 2 );