Make WordPress Core

Ticket #18548: title-template-system.diff

File title-template-system.diff, 14.9 KB (added by chrisbliss18, 13 years ago)

Updated to modify twentyeleven and twentyten

  • wp-content/themes/twentyeleven/functions.php

     
    108108        // This theme uses Featured Images (also known as post thumbnails) for per-post/per-page Custom Header images
    109109        add_theme_support( 'post-thumbnails' );
    110110
     111        // Add support for new title system
     112        add_theme_support( 'title-tag', array( 'sep' => ' | ' ) );
     113
    111114        // Add support for custom headers.
    112115        add_theme_support( 'custom-header', array(
    113116                // The default header text color.
  • wp-content/themes/twentyeleven/header.php

     
    2424<head>
    2525<meta charset="<?php bloginfo( 'charset' ); ?>" />
    2626<meta name="viewport" content="width=device-width" />
    27 <title><?php
    28         /*
    29          * Print the <title> tag based on what is being viewed.
    30          */
    31         global $page, $paged;
    32 
    33         wp_title( '|', true, 'right' );
    34 
    35         // Add the blog name.
    36         bloginfo( 'name' );
    37 
    38         // Add the blog description for the home/front page.
    39         $site_description = get_bloginfo( 'description', 'display' );
    40         if ( $site_description && ( is_home() || is_front_page() ) )
    41                 echo " | $site_description";
    42 
    43         // Add a page number if necessary:
    44         if ( $paged >= 2 || $page >= 2 )
    45                 echo ' | ' . sprintf( __( 'Page %s', 'twentyeleven' ), max( $paged, $page ) );
    46 
    47         ?></title>
    4827<link rel="profile" href="http://gmpg.org/xfn/11" />
    4928<link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo( 'stylesheet_url' ); ?>" />
    5029<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" />
  • wp-content/themes/twentyten/functions.php

     
    8484        // Add default posts and comments RSS feed links to head
    8585        add_theme_support( 'automatic-feed-links' );
    8686
     87        // Add support for new title system
     88        add_theme_support( 'title-tag', array( 'sep' => ' | ' ) );
     89
    8790        // Make theme available for translation
    8891        // Translations can be filed in the /languages/ directory
    8992        load_theme_textdomain( 'twentyten', get_template_directory() . '/languages' );
  • wp-content/themes/twentyten/header.php

     
    1212<html <?php language_attributes(); ?>>
    1313<head>
    1414<meta charset="<?php bloginfo( 'charset' ); ?>" />
    15 <title><?php
    16         /*
    17          * Print the <title> tag based on what is being viewed.
    18          */
    19         global $page, $paged;
    20 
    21         wp_title( '|', true, 'right' );
    22 
    23         // Add the blog name.
    24         bloginfo( 'name' );
    25 
    26         // Add the blog description for the home/front page.
    27         $site_description = get_bloginfo( 'description', 'display' );
    28         if ( $site_description && ( is_home() || is_front_page() ) )
    29                 echo " | $site_description";
    30 
    31         // Add a page number if necessary:
    32         if ( $paged >= 2 || $page >= 2 )
    33                 echo ' | ' . sprintf( __( 'Page %s', 'twentyten' ), max( $paged, $page ) );
    34 
    35         ?></title>
    3615<link rel="profile" href="http://gmpg.org/xfn/11" />
    3716<link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo( 'stylesheet_url' ); ?>" />
    3817<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" />
  • wp-includes/general-template.php

     
    617617}
    618618
    619619/**
     620 * Display <title> tag with contents
     621 *
     622 * When using add_theme_support to add support for this function, one can set a few variables:
     623 * 'sep' string, for the separator used in title tags
     624 * 'home-title' string, for the homepage title. Only used for the blog page when the blog page is also the frontpage.
     625 * 'frontpage-title' string, for the front page when it's not the posts page.
     626 * 'show-sitename' boolean, defaults to true. When set to false the site name will not be added to titles.
     627 *
     628 * @since 3.4.0
     629 * @access private
     630 */
     631function _wp_render_title_tag() {
     632        if ( ! current_theme_supports( 'title-tag' ) )
     633                return;
     634
     635        // This can only work internally on wp_head.
     636        if ( ! did_action( 'wp_head' ) && ( ! function_exists( 'doing_action' ) || ! doing_action( 'wp_head' ) ) )
     637                return;
     638
     639        // If wp_title() has fired, don't do anything.
     640        if ( did_action( 'wp_title' ) )
     641                return;
     642
     643        // Allow early filtering, if this returns a title skip all the logic below
     644        // and print it.
     645        if ( null !== $pre = apply_filters( 'pre_wp_title_tag', null ) ) {
     646                echo "<title>$pre</title>\n";
     647                return;
     648        }
     649
     650        global $page, $paged;
     651
     652        // Retrieve the options set by the add_theme_support call. The
     653        // title_tag_options_filter filter allows any interested code to modify the
     654        // set options easily.
     655        $options = get_theme_support( 'title-tag' );
     656        $options = apply_filters( 'title_tag_options_filter', $options[0] );
     657
     658        // ltr language sites tend to use title that has the most-specific part of
     659        // the title on the left. rtl language sites tend to reverse this. The auto
     660        // option automatically selects the appropriate direction based upon whether
     661        // the site is set to use a text direction of ltr or rtl. This can be
     662        // directly overridden by supplying ltr or rtl.
     663        if ( 'auto' == $options['direction'] || ! in_array( $options['direction'], array( 'ltr', 'rtl' ) ) )
     664                $options['direction'] = is_rtl() ? 'rtl' : 'ltr';
     665
     666        // Set up the PAGING variable.
     667        if ( empty( $options['variables']['PAGING'] ) )
     668                $options['variables']['PAGING'] = '%1$d';
     669        if ( $paged >= 2 || $page >= 2 )
     670                $options['variables']['PAGING'] = sprintf( $options['variables']['PAGING'], max( $paged, $page ) );
     671        else
     672                $options['variables']['PAGING'] = '';
     673
     674        // Allow for a filter to set the title
     675        if ( null !== $title = apply_filters( 'title_tag_filter', null ) ) {
     676                if ( is_array($title) )
     677                        list( $title, $view ) = $title;
     678                else
     679                        $view = 'filter';
     680        // Standard home page view
     681        } elseif ( is_home() && is_front_page() ) {
     682                $title = get_bloginfo('name');
     683                $view = 'home';
     684        // Static Posts Page
     685        } elseif ( is_home() && !is_front_page() ) {
     686                $_post = get_post( get_option('page_for_posts') );
     687                $title = $_post->post_title;
     688                $view = array( 'blog', 'page' );
     689        // Static Front Page
     690        } elseif ( !is_home() && is_front_page() ) {
     691                $title = single_post_title( '', false );
     692                $view = array( 'frontpage', 'page' );
     693        // Post, Page, Attachment
     694        } else if ( is_singular() ) {
     695                $title = single_post_title( '', false );
     696                $_post = get_queried_object();
     697                $view = array( $_post->post_type . '-singular', 'singular' );
     698        }
     699        // Category or Tag Archive
     700        elseif ( is_category() || is_tag() ) {
     701                $title = single_term_title( '', false );
     702                $term = get_queried_object();
     703                $view = array( $term->taxonomy . '-taxonomy-archive', 'taxonomy-archive', 'archive' );
     704        }
     705        // Taxonomy Archive
     706        elseif ( is_tax() ) {
     707                $term = get_queried_object();
     708                $tax = get_taxonomy( $term->taxonomy );
     709                $title = single_term_title( $tax->labels->name, false );
     710                $view = array( $term->taxonomy . '-taxonomy-archive', 'taxonomy-archive', 'archive' );
     711        }
     712        // Author Archive
     713        elseif ( is_author() ) {
     714                $author = get_queried_object();
     715                $title = $author->display_name;
     716                $view = array( 'author-archive', 'archive' );
     717        }
     718        // Post Type Archive
     719        elseif ( is_post_type_archive() ) {
     720                $title = post_type_archive_title( '', false );
     721                $_post = get_queried_object();
     722                $view = array( $_post->query_var . '-post-type-archive', 'post-type-archive', 'archive' );
     723        }
     724        // Date Archive
     725        elseif ( is_date() ) {
     726                if ( is_year() ) {
     727                        if ( is_month() )
     728                                $title = is_day() ? get_the_date() : trim( single_month_title( ' ', false ) );
     729                        else
     730                                $title = get_query_var( 'year' );
     731                } elseif ( is_month() && !is_day() ) {
     732                        $title = single_month_title( '', false );
     733                }
     734                $view = array( 'date-archive', 'archive' );
     735        }
     736        // Search Results
     737        elseif ( is_search() ) {
     738                $title = strip_tags( get_query_var('s') );
     739                $view = 'search';
     740        }
     741        // Page Not Found
     742        elseif ( is_404() ) {
     743                $view = '404';
     744        }
     745
     746        // If a view is set, loop through the views to find the relevant title and
     747        // title format.
     748        if ( !empty( $view ) ) {
     749                foreach ( (array) $view as $cur_view ) {
     750                        if ( empty( $title_format ) && isset( $options["title_format-$cur_view"] ) )
     751                                $title_format = $options["title_format-$cur_view"];
     752                        if ( empty( $options_title ) && isset( $options["title-$cur_view"] ) )
     753                                $options_title = $options["title-$cur_view"];
     754                }
     755        }
     756
     757        // Set the default value if a match was not found.
     758        if ( empty( $title_format ) )
     759                $title_format = $options['title_format'];
     760        if ( empty( $options_title ) )
     761                $options_title = $options['title'];
     762
     763        // If the title from the options contains a printf variable, replace it with
     764        // the title generated above and use the result as the new title.
     765        $use_options_title = false;
     766        if ( ! is_array( $options_title ) )
     767                $options_title = array( $options_title );
     768        foreach ( $options_title as $index => $options_title_part ) {
     769                if ( false !== strpos( $options_title_part, '%1$s' ) ) {
     770                        $options_title[$index] = sprintf( $options_title_part, $title );
     771                        $use_options_title = true;
     772                }
     773        }
     774        if ( $use_options_title )
     775                $title = $options_title;
     776
     777        // Flip the title and title format if the direction is rtl.
     778        if ( 'rtl' == $options['direction'] ) {
     779                if ( is_array($title) )
     780                        $title = array_reverse( $title );
     781                if ( is_array($title_format) )
     782                        $title_format = array_reverse( $title_format );
     783        }
     784
     785        // Loop through the title parts stored in the title format array. For each
     786        // title part, replace any found variables with their relevant value. If any
     787        // title part is empty, skip it to prevent duplicate seperators in the final
     788        // title.
     789        $new_title_format = array();
     790        foreach ( (array) $title_format as $title_part ) {
     791                foreach ( $options['variables'] as $var => $val )
     792                        $title_part = str_replace( "%%$var%%", $val, $title_part );
     793                if ( !empty( $title_part ) )
     794                        $new_title_format[] = $title_part;
     795        }
     796
     797        // Merge the title format array with the seperator seperating each title
     798        // part.
     799        $title_format = implode( $options['sep'], $new_title_format );
     800
     801        // If the title is an array, merge the parts with the seperator seperating
     802        // each part. This allows for complex multi-part view-specific titles.
     803        if ( is_array($title) )
     804                $title = implode( $options['sep'], $title );
     805
     806        // Construct the finished title by replacing the %%TITLE%% placeholder
     807        // variable with the view-specific title.
     808        $title = str_replace( '%%TITLE%%', $title, $title_format );
     809
     810        echo "<title>" . $title . "</title>\n";
     811}
     812
     813/**
    620814 * Display or retrieve page title for post.
    621815 *
    622816 * This is optimized for single.php template file for displaying the post title.
  • wp-includes/theme.php

     
    13281328                                define( 'BACKGROUND_IMAGE', $args[0]['default-image'] );
    13291329
    13301330                        break;
     1331
     1332                case 'title-tag' :
     1333                        if ( ! is_array( $args ) )
     1334                                $args = array( 0 => array() );
     1335
     1336                        $jit = isset( $args[0]['__jit'] );
     1337                        unset( $args[0]['__jit'] );
     1338
     1339                        // Merge in data from previous add_theme_support() calls. The first value registered wins.
     1340                        if ( isset( $_wp_theme_features['title-tag'] ) ) {
     1341                                // It is annoying that array_merge_recursive can't work here to allow for new sub-array entries
     1342                                // to replace existing ones rather than create an array structure. It would be nice if the
     1343                                // wp_parse_args function could handle such nested arrays.
     1344                                if ( isset( $_wp_theme_features['title-tag'][0]['variables'] ) && isset( $args[0]['variables'] ) )
     1345                                        $title_tag_variables = array_merge( $args[0]['variables'], $_wp_theme_features['title-tag'][0]['variables'] );
     1346                                $args[0] = wp_parse_args( $_wp_theme_features['title-tag'][0], $args[0] );
     1347                                if ( isset( $title_tag_variables ) )
     1348                                        $args[0]['variables'] = $title_tag_variables;
     1349                        }
     1350
     1351                        if ( $jit ) {
     1352                                $defaults = array(
     1353                                        'sep'                     => ' - ',
     1354                                        'direction'               => 'auto', // auto, rtl, ltr
     1355                                        // %%TITLE%% is a special variable but can still be overridden if desired.
     1356                                        'title_format'            => array( '%%TITLE%%', '%%PAGING%%', '%%BLOGNAME%%' ),
     1357                                        'title_format-home'       => array( '%%BLOGNAME%%', '%%PAGING%%', '%%DESCRIPTION%%' ),
     1358                                        'title'                   => '',
     1359                                        'title-archive'           => __( 'Archive' ),
     1360                                        /* translators: 1: author name */
     1361                                        'title-author-archive'    => __( 'Author Archive for %1$s' ),
     1362                                        /* translators: 1: date description */
     1363                                        'title-date-archive'      => __( 'Archive for %1$s' ),
     1364                                        /* translators: 1: post type archive title */
     1365                                        'title-post-type-archive' => __( 'Archive for %1$s' ),
     1366                                        /* translators: 1: search phrase */
     1367                                        'title-search'            => __( 'Search Results for "%1$s"' ),
     1368                                        /* translators: 1: taxonomy name */
     1369                                        'title-taxonomy-archive'  => __( 'Archive for %1$s' ),
     1370                                        'title-404'               => __( 'Page not found' ),
     1371                                        'variables'               => array(
     1372                                                /* translators: 1: page number */
     1373                                                'PAGING'      => __( 'Page %1$d' ),
     1374                                                'BLOGNAME'    => get_bloginfo( 'name' ),
     1375                                                'DESCRIPTION' => get_bloginfo( 'description' ),
     1376                                        ),
     1377                                );
     1378
     1379                                if ( isset( $args[0]['variables'] ) )
     1380                                        $title_tag_variables = array_merge( $args[0]['variables'], $defaults['variables'] );
     1381                                $args[0] = wp_parse_args( $args[0], $defaults );
     1382                                if ( isset( $title_tag_variables ) )
     1383                                        $args[0]['variables'] = $title_tag_variables;
     1384                        }
     1385
     1386                        break;
     1387
    13311388        }
    13321389
    13331390        $_wp_theme_features[ $feature ] = $args;
    13341391}
    13351392
    13361393/**
    1337  * Registers the internal custom header and background routines.
     1394 * Registers the internal theme feature routines.
    13381395 *
    13391396 * @since 3.4.0
    13401397 * @access private
    13411398 */
    1342 function _custom_header_background_just_in_time() {
    1343         global $custom_image_header, $custom_background;
     1399function _custom_theme_features_just_in_time() {
     1400        global $custom_image_header, $custom_background, $title_tag;
    13441401
    13451402        if ( current_theme_supports( 'custom-header' ) ) {
    13461403                // In case any constants were defined after an add_custom_image_header() call, re-run.
     
    13681425                        $custom_background = new Custom_Background( $args[0]['admin-head-callback'], $args[0]['admin-preview-callback'] );
    13691426                }
    13701427        }
     1428
     1429        if ( current_theme_supports( 'title-tag' ) ) {
     1430                add_theme_support( 'title-tag', array( '__jit' => true ) );
     1431
     1432                add_action( 'wp_head', '_wp_render_title_tag', 0, 0 );
     1433        }
    13711434}
    1372 add_action( 'wp_loaded', '_custom_header_background_just_in_time' );
     1435add_action( 'wp_loaded', '_custom_theme_features_just_in_time' );
    13731436
    13741437/**
    13751438 * Gets the theme support arguments passed when registering that support