WordPress at Your Fingertips

wp_title()WP 1.0.0

Display or retrieve page title.

The function is deprecated from WP 4.4.

Instead, you should use theme support 'title-tag':

/*
 * Let WordPress manage the document title.
 * By adding theme support, we declare that this theme does not use a
 * hard-coded <title> tag in the document head, and expect WordPress to
 * provide it for us.
 */
add_theme_support( 'title-tag' );

'title-tag' works base on wp_get_document_title().

You can specify a separator between a page title and additional words in the title. Since 2.5, you can specify the direction of the separator: right, left (by default, no need to specify it).

This template tag can be used anywhere: inside The Loop and outside of it. Usually, it's used to display the <title> tag in the <head> of the page.

1 time — 0.000125 sec (fast) | 50000 times — 2.32 sec (fast)
Hooks from the function

Return

String|null. String when $display is false, nothing otherwise.

Usage

wp_title( $sep, $display, $seplocation );
$sep(string)
How to separate the various items within the page title.
Default: '»'
$display(true/false)
Whether to display or retrieve title.
Default: true
$seplocation(string)
Direction to display a separator. Introduced in version 2.5. If you specify right, the separator will be located to the right of the title, in all other cases, it will be to the left.
Default: ''

Examples

1

#1 Without a separator

<title><?php bloginfo('name'); ?> <?php wp_title('', true); ?></title>
0

#2 Display the blog title

<title><?php bloginfo('name'); ?> <?php wp_title(); ?></title>

Output: Blog title » Page title

0

#3 Display for homepage

If for the homepage we use a custom template with an arbitrary output (The Loop), then the page title may be incorrect. To avoid this, use a similar code:

<title><?php bloginfo('name'); ?> | 
<?php is_home() ? bloginfo('description') : wp_title(''); ?></title>
0

#4 Using a custom separator

Use blog name before page title, and use | as a separator.

<title><?php bloginfo('name'); ?><?php wp_title('|'); ?></title>

Output: Blog title | Page title

Important! Don't use _ and -- as separators, it may cause errors.

0

#5 Reverse the titles

If you want to display the page title first, then the blog title use the following code:

<title><?php wp_title('|', true, 'right'); ?><?php bloginfo('name'); ?></title>

Notes

  • Global. WP_Locale. $wp_locale WordPress date and time locale object.

Changelog

Since 1.0.0 Introduced.

wp_title() code WP 6.5.2

function wp_title( $sep = '&raquo;', $display = true, $seplocation = '' ) {
	global $wp_locale;

	$m        = get_query_var( 'm' );
	$year     = get_query_var( 'year' );
	$monthnum = get_query_var( 'monthnum' );
	$day      = get_query_var( 'day' );
	$search   = get_query_var( 's' );
	$title    = '';

	$t_sep = '%WP_TITLE_SEP%'; // Temporary separator, for accurate flipping, if necessary.

	// If there is a post.
	if ( is_single() || ( is_home() && ! is_front_page() ) || ( is_page() && ! is_front_page() ) ) {
		$title = single_post_title( '', false );
	}

	// If there's a post type archive.
	if ( is_post_type_archive() ) {
		$post_type = get_query_var( 'post_type' );
		if ( is_array( $post_type ) ) {
			$post_type = reset( $post_type );
		}
		$post_type_object = get_post_type_object( $post_type );
		if ( ! $post_type_object->has_archive ) {
			$title = post_type_archive_title( '', false );
		}
	}

	// If there's a category or tag.
	if ( is_category() || is_tag() ) {
		$title = single_term_title( '', false );
	}

	// If there's a taxonomy.
	if ( is_tax() ) {
		$term = get_queried_object();
		if ( $term ) {
			$tax   = get_taxonomy( $term->taxonomy );
			$title = single_term_title( $tax->labels->name . $t_sep, false );
		}
	}

	// If there's an author.
	if ( is_author() && ! is_post_type_archive() ) {
		$author = get_queried_object();
		if ( $author ) {
			$title = $author->display_name;
		}
	}

	// Post type archives with has_archive should override terms.
	if ( is_post_type_archive() && $post_type_object->has_archive ) {
		$title = post_type_archive_title( '', false );
	}

	// If there's a month.
	if ( is_archive() && ! empty( $m ) ) {
		$my_year  = substr( $m, 0, 4 );
		$my_month = substr( $m, 4, 2 );
		$my_day   = (int) substr( $m, 6, 2 );
		$title    = $my_year .
			( $my_month ? $t_sep . $wp_locale->get_month( $my_month ) : '' ) .
			( $my_day ? $t_sep . $my_day : '' );
	}

	// If there's a year.
	if ( is_archive() && ! empty( $year ) ) {
		$title = $year;
		if ( ! empty( $monthnum ) ) {
			$title .= $t_sep . $wp_locale->get_month( $monthnum );
		}
		if ( ! empty( $day ) ) {
			$title .= $t_sep . zeroise( $day, 2 );
		}
	}

	// If it's a search.
	if ( is_search() ) {
		/* translators: 1: Separator, 2: Search query. */
		$title = sprintf( __( 'Search Results %1$s %2$s' ), $t_sep, strip_tags( $search ) );
	}

	// If it's a 404 page.
	if ( is_404() ) {
		$title = __( 'Page not found' );
	}

	$prefix = '';
	if ( ! empty( $title ) ) {
		$prefix = " $sep ";
	}

	/**
	 * Filters the parts of the page title.
	 *
	 * @since 4.0.0
	 *
	 * @param string[] $title_array Array of parts of the page title.
	 */
	$title_array = apply_filters( 'wp_title_parts', explode( $t_sep, $title ) );

	// Determines position of the separator and direction of the breadcrumb.
	if ( 'right' === $seplocation ) { // Separator on right, so reverse the order.
		$title_array = array_reverse( $title_array );
		$title       = implode( " $sep ", $title_array ) . $prefix;
	} else {
		$title = $prefix . implode( " $sep ", $title_array );
	}

	/**
	 * Filters the text of the page title.
	 *
	 * @since 2.0.0
	 *
	 * @param string $title       Page title.
	 * @param string $sep         Title separator.
	 * @param string $seplocation Location of the separator (either 'left' or 'right').
	 */
	$title = apply_filters( 'wp_title', $title, $sep, $seplocation );

	// Send it out.
	if ( $display ) {
		echo $title;
	} else {
		return $title;
	}
}
vladlu 100vlad.lu
Editors: Kama 246
2 comments
    Log In