Introduce a new means of outputting a <title> tag in the theme head. Requires a theme to add support by calling add_theme_support( 'title-tag' ). This is the first step in adding a more robust means of generating and outputting the title tag.

See #18548.
Props obenland, chrisbliss18, joostdevalk.


Built from https://develop.svn.wordpress.org/trunk@30074


git-svn-id: http://core.svn.wordpress.org/trunk@30074 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
John Blackbourn 2014-10-28 21:12:22 +00:00
parent 315612a96b
commit 0f64edb657
4 changed files with 52 additions and 2 deletions

View File

@ -196,6 +196,7 @@ add_filter( 'title_save_pre', 'trim' );
add_filter( 'http_request_host_is_external', 'allowed_http_request_hosts', 10, 2 ); add_filter( 'http_request_host_is_external', 'allowed_http_request_hosts', 10, 2 );
// Actions // Actions
add_action( 'wp_head', '_wp_render_title_tag', 1 );
add_action( 'wp_head', 'wp_enqueue_scripts', 1 ); add_action( 'wp_head', 'wp_enqueue_scripts', 1 );
add_action( 'wp_head', 'feed_links', 2 ); add_action( 'wp_head', 'feed_links', 2 );
add_action( 'wp_head', 'feed_links_extra', 3 ); add_action( 'wp_head', 'feed_links_extra', 3 );

View File

@ -730,6 +730,25 @@ function get_bloginfo( $show = '', $filter = 'raw' ) {
return $output; return $output;
} }
/**
* Display <title> tag with contents.
*
* @since 4.1.0
* @access private
*/
function _wp_render_title_tag() {
if ( ! current_theme_supports( 'title-tag' ) ) {
return;
}
// This can only work internally on wp_head.
if ( ! did_action( 'wp_head' ) && ! doing_action( 'wp_head' ) ) {
return;
}
echo '<title>' . wp_title( '|', false, 'right' ) . "</title>\n";
}
/** /**
* Display or retrieve page title for all areas of blog. * Display or retrieve page title for all areas of blog.
* *
@ -753,7 +772,7 @@ function get_bloginfo( $show = '', $filter = 'raw' ) {
* @return string|null String on retrieve, null when displaying. * @return string|null String on retrieve, null when displaying.
*/ */
function wp_title($sep = '&raquo;', $display = true, $seplocation = '') { function wp_title($sep = '&raquo;', $display = true, $seplocation = '') {
global $wp_locale; global $wp_locale, $page, $paged;
$m = get_query_var('m'); $m = get_query_var('m');
$year = get_query_var('year'); $year = get_query_var('year');
@ -853,6 +872,19 @@ function wp_title($sep = '&raquo;', $display = true, $seplocation = '') {
$title = $prefix . implode( " $sep ", $title_array ); $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. * Filter the text of the page title.
* *

View File

@ -1611,6 +1611,15 @@ function add_theme_support( $feature ) {
define( 'BACKGROUND_IMAGE', $args[0]['default-image'] ); define( 'BACKGROUND_IMAGE', $args[0]['default-image'] );
break; break;
// Ensure that 'title-tag' is accessible in the admin.
case 'title-tag' :
// Can be called in functions.php but must happen before wp_loaded, i.e. not in header.php.
if ( did_action( 'wp_loaded' ) ) {
_doing_it_wrong( "add_theme_support( 'title-tag' )", sprintf( _x( 'You need to add theme support before %s.', 'action name' ), '<code>wp_loaded</code>' ), '4.1.0' );
return false;
}
} }
$_wp_theme_features[ $feature ] = $args; $_wp_theme_features[ $feature ] = $args;
@ -1763,6 +1772,14 @@ function current_theme_supports( $feature ) {
if ( !isset( $_wp_theme_features[$feature] ) ) if ( !isset( $_wp_theme_features[$feature] ) )
return false; return false;
if ( 'title-tag' == $feature ) {
// Don't confirm support unless called internally.
$trace = debug_backtrace();
if ( ! in_array( $trace[1]['function'], array( '_wp_render_title_tag', 'wp_title' ) ) ) {
return false;
}
}
// If no args passed then no extra checks need be performed // If no args passed then no extra checks need be performed
if ( func_num_args() <= 1 ) if ( func_num_args() <= 1 )
return true; return true;

View File

@ -4,7 +4,7 @@
* *
* @global string $wp_version * @global string $wp_version
*/ */
$wp_version = '4.1-alpha-30073'; $wp_version = '4.1-alpha-30074';
/** /**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.