WordPress函数:wp_title 给页面一个合适的标题

江河/ 2023年04月24日/ WordPress/ 浏览 2103

函数原型:


wp_title( string $sep = '»', bool $display = true, string $seplocation = '' ): string|void


默认情况下,页面标题将在页面标题之前显示分隔符,因此博客标题将位于页面标题之前。这不利于标题显示,因为博客标题显示在大多数选项卡上,而不是用户正在查看的重要页面。


将博客标题放在页面标题的后面或右边也有SEO的好处。然而,在大多数浏览器支持选项卡的情况下,将博客标题放在右边是很常见的。您可以通过使用seplocation参数并将值设置为“right”来实现这一点。这一变化是在2.5.0左右引入的,以防主题的向后兼容性很重要。


参数说明:


$sep,分隔符,默认:'>>'。


$display,直接显示还是返回一个字符串。默认:'true',直接显示。


$seplocation,分隔符位置,'left' or 'right'。


插件可能会使用wp_title过滤器来生成一个值。虽然可以通过连接bloginfo(网站名称)来构建“标题”,但如果您在主题中不使用wp_title函数,则可能会出现错误或意外行为。


返回值:


函数返回一个串联的字符串。它总是在数据库中查询默认字符串;默认字符串的值取决于帖子或页面的类型。


文章页:文章的标题


基于日期的归档:日期(例如,“2006”, “2006 – January”)


类别:类别的名称


作者页面:用户的公用名称


函数源码:


function wp_title( $sep = '»', $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 ";
	}

	$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 );
	}

	$title = apply_filters( 'wp_title', $title, $sep, $seplocation );

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


包含钩子:


apply_filters( 'wp_title', string $title, string $sep, string $seplocation )


apply_filters( 'wp_title_parts', string[] $title_array )


使用举例:


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

发表评论

暂无评论,抢个沙发...

客服 工单