wp_title()获取当前页面的标题

目录

描述

Display or retrieve page <title> for all areas of blog.

The text for the <title> element is generated based on the type of post, page, archive, etc., being displayed. You may also append or prepend a string to this using the function's parameters. The result may be displayed directly, or returned for further processing.

You can also specify what separator is to be used between the different segments of the title. By default, the separator is displayed before the page title, so that the blog title will be before the page title. This is not good for title display, since the blog title shows up on most tabs and not what is important, which is the page that the user is looking at.

The main reason to have the blog title to the right is for browsers supporting tabs. You can achieve this by using the $seplocation parameter and setting the value to 'right'.

wp_title() 描述

用法

 <?php wp_title$sep$display$seplocation ); ?> 

Best practices

Plugins might use the wp_title filter to generate a value. While it is possible to construct a "title" by doing things such as concatenating with bloginfo (the Site Name), if you do not use the wp_title function in your theme, you will likely have errors or unexpected behavior.

Required for public themes

This function, and not a work-around, is required for publicly by WordPress standards.

wp_title() 用法

参数

The function always returns a value from the database, and the parameters define what information is appended to the database value, where it is appended, and how it is formatted.

$sep

(string) (可选) Short for "separator" is a string appended before or after the value returned from the database. The string may be zero characters, see Examples, below. The sep string typically separates the Site Title (or a similar string) from the "title" of the post or page.

默认值: &raquo; (»)

$display

(boolean) (可选) Formats the return value either for display as text (TRUE) or as a parameter for another PHP function (FALSE).

默认值: TRUE

$seplocation

(string) (可选) Defines whether the sep string is added before (prepended, or to the left) or after (appended, or to the right) of the value returned from the database. If seplocation is right, then the function appends the sep string to the database value: said differently, the sep is placed to the right of the title of the post or page. If seplocation is left or any value other than right, then the function prepends the sep string to the database value. Said differently, the function adds the sep to the left of the title of the post or page. Special case: if $display is FALSE and you do not define the $seplocation parameter, the function will prepend a space to the entire string.

默认值: left

wp_title() 参数

返回值

The function returns a concatenated string. It always queries the database for a default string; the value of the default string depends on the type of post or page:

Single post

the title of the post

Date-based archive 

the date (e.g., "2006", "2006 - January")

Category 

the name of the category

Author page 

the public name of the user

The function then prepends or appends the sep string and returns the entire value.

wp_title() 返回值

示例

Default

If you do not pass any parameters for a single post, for example:

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
 <title><?php wp_title(); ?></title>

If the title of the post is "Hello world!", then the function will return

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
 » Hello world!

Zero-character sep

The sep string may be zero characters, which will remove » from the returned value. To do this, set the sep parameter to zero characters, for example:

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
 <title><?php wp_title(''); ?></title>

If the title of the post is "Hello world!", then the function will return:

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
 Hello world!

Customizing with the filter

If you want to change the way that the title displays on different pages you can use a filter.

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */

/**
 * Filters wp_title to print a neat <title> tag based on what is being viewed.
 *
 * @param string $title Default title text for current view.
 * @param string $sep Optional separator.
 * @return string The filtered title.
 */
function theme_name_wp_title( $title, $sep ) {
	if ( is_feed() ) {
		return $title;
	}
	
	global $page, $paged;

	// Add the blog name
	$title .= get_bloginfo( 'name', 'display' );

	// Add the blog description for the home/front page.
	$site_description = get_bloginfo( 'description', 'display' );
	if ( $site_description && ( is_home() || is_front_page() ) ) {
		$title .= " $sep $site_description";
	}

	// Add a page number if necessary:
	if ( ( $paged >= 2 || $page >= 2 ) && ! is_404() ) {
		$title .= " $sep " . sprintf( __( 'Page %s', '_s' ), max( $paged, $page ) );
	}

	return $title;
}
add_filter( 'wp_title', 'theme_name_wp_title', 10, 2 );

Covering Homepage

If you are using a custom homepage with custom loops and stuff or a custom front-page, you will have an empty wp_title. Here goes a neat hack to add the description/tagline at the wp_title place on homepage:

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
<title><?php wp_title(''); ?></title>

Then in your "functions.php" from theme file :

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
add_filter( 'wp_title', 'baw_hack_wp_title_for_home' );
function baw_hack_wp_title_for_home( $title )
{
  if( empty( $title ) && ( is_home() || is_front_page() ) ) {
    return __( 'Home', 'theme_domain' ) . ' | ' . get_bloginfo( 'description' );
  }
  return $title;
}

You can format this string as you want of course.

wp_title() 示例

历史

  • 添加于 版本: 1.0.0
  • 2.5.0: 添加 $seplocation parameter

wp_title() 历史

源文件

wp_title() is in wp-includes/general-template.php.

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
/**
 * Display or retrieve page title for all areas of blog.
 *
 * By default, the page title will display the separator before the page title,
 * so that the blog title will be before the page title. This is not good for
 * title display, since the blog title shows up on most tabs and not what is
 * important, which is the page that the user is looking at.
 *
 * There are also SEO benefits to having the blog title after or to the 'right'
 * or the page title. However, it is mostly common sense to have the blog title
 * to the right with most browsers supporting tabs. You can achieve this by
 * using the seplocation parameter and setting the value to 'right'. This change
 * was introduced around 2.5.0, in case backwards compatibility of themes is
 * important.
 *
 * @since 1.0.0
 *
 * @global WP_Locale $wp_locale
 * @global int       $page
 * @global int       $paged
 *
 * @param string $sep         Optional, default is '»'. How to separate the various items within the page title.
 * @param bool   $display     Optional, default is true. Whether to display or retrieve title.
 * @param string $seplocation Optional. Direction to display title, 'right'.
 * @return string|void String on retrieve.
 */
function wp_title( $sep = '»', $display = true, $seplocation = '' ) {
	global $wp_locale, $page, $paged;

	$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_TITILE_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 = $wp_locale->get_month(substr($m, 4, 2));
		$my_day = intval(substr($m, 6, 2));
		$title = $my_year . ( $my_month ? $t_sep . $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 phrase */
		$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 ";

	/**
	 * Filter the parts of the page title.
	 *
	 * @since 4.0.0
	 *
	 * @param array $title_array 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 ) { // sep 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 );
	}

	if ( current_theme_supports( 'title-tag' ) && ! is_feed() ) {
		$title .= get_bloginfo( 'name', 'display' );

		$site_description = get_bloginfo( 'description', 'display' );
		if ( $site_description && ( is_home() || is_front_page() ) ) {
			$title .= " $sep $site_description";
		}

		if ( ( $paged >= 2 || $page >= 2 ) && ! is_404() ) {
			$title .= " $sep " . sprintf( __( 'Page %s' ), max( $paged, $page ) );
		}
	}

	/**
	 * Filter 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 (left or right).
	 */
	$title = apply_filters( 'wp_title', $title, $sep, $seplocation );

	// Send it out
	if ( $display )
		echo $title;
	else
		return $title;

}

wp_title() 源文件

相关