Make WordPress Core

Ticket #18548: title-tag-3.diff

File title-tag-3.diff, 8.3 KB (added by joostdevalk, 13 years ago)

Update on Nacin's patch with better handling of date archive titles

  • wp-includes/theme.php

     
    18471847 *
    18481848 * @since 2.9.0
    18491849 * @param string $feature the feature being added
     1850 * @return bool|WP_Error True on success, WP_Error on failure.
    18501851 */
    18511852function add_theme_support( $feature ) {
    18521853        global $_wp_theme_features;
     
    18581859
    18591860        if ( $feature == 'post-formats' && is_array( $_wp_theme_features[$feature][0] ) )
    18601861                $_wp_theme_features[$feature][0] = array_intersect( $_wp_theme_features[$feature][0], array_keys( get_post_format_slugs() ) );
     1862
     1863        // ensure that 'title-tag' is accessible in the admin.
     1864        if ( $feature == 'title-tag'
     1865                && function_exists( 'doing_action' )
     1866                && ! doing_action( 'after_setup_theme' ) // can be called here
     1867                && ! doing_action( 'init' ) // can also be called here
     1868                && ( doing_action() || did_action( 'wp_loaded' ) ) // can be called in functions.php but must happen before wp_loaded, i.e. not in header.php
     1869        ) {
     1870                $_wp_theme_features[$feature] = false;
     1871                return new WP_Error( 'wrong_hook', sprintf( __( 'Call %s on the %s hook.' ), "add_theme_support('title-tag')", 'after_setup_theme' ) );
     1872        }
     1873
     1874        return true;
    18611875}
    18621876
    18631877/**
  • 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.3.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 and print it.
     644        if ( null !== $pre = apply_filters( 'pre_wp_title_tag', null ) ) {
     645                echo '<title>' . $pre . "<title>\n";
     646                return;
     647        }
     648
     649        global $page, $paged, $wp_locale;
     650       
     651        // Options that can be passed along:
     652        $options = get_theme_support( 'title-tag' );
     653        $options = $options[0];
     654
     655        $show_sitename = true;
     656        if ( isset( $options['show-sitename'] ) )
     657                $show_sitename = $options['show-sitename'];
     658               
     659        $title = array();
     660       
     661        if ( is_home() && is_front_page() ) {
     662                if ( isset($options['home-title']) && $options['home-title'] ) {
     663                        $title[] = $options['home-title'];
     664                } else {
     665                        $title[] = get_bloginfo('name');
     666
     667                        // Add a page number if necessary:
     668                        if ( $paged >= 2 || $page >= 2 )
     669                                $title[] = sprintf( __( 'Page %s' ), max( $paged, $page ) );
     670
     671                        if ( '' != $desc = get_bloginfo( 'description', 'display' ) )
     672                                $title[] = $desc;
     673                }
     674        // If we're on the blog page and that page is not the homepage, use the container page's title
     675        } elseif ( is_home() && !is_front_page() ) {
     676                $_post = get_post( get_option('page_for_posts') );
     677                $title[] = $_post->post_title;
     678
     679                // Add a page number if necessary:
     680                if ( $paged >= 2 || $page >= 2 )
     681                        $title[] = sprintf( __( 'Page %s' ), max( $paged, $page ) );
     682
     683                if ( $show_sitename )
     684                        $title[] = get_bloginfo('name');
     685        } elseif ( !is_home() && is_front_page() ) {
     686                if ( isset( $options['frontpage-title'] ) && $options['frontpage-title'] ) {
     687                        $title[] = $options['frontpage-title'];
     688                } else {
     689                        $title[] = single_post_title( '', false );
     690
     691                        if ( $show_sitename )
     692                                $title[] = get_bloginfo('name');
     693                }
     694        } else {
     695                // If we're on a post / page
     696                if ( is_singular() ) {
     697                        $title[] = single_post_title( '', false );
     698                }
     699               
     700                // If we're on a category or tag archive
     701                elseif ( is_category() || is_tag() ) {
     702                        $title[] = single_term_title( '', false );
     703                }
     704               
     705                // If we're on a 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                }
     711
     712                // If we're on an author archive
     713                elseif ( is_author() ) {
     714                        $author = get_queried_object();
     715                        $title[] = $author->display_name;
     716                }
     717
     718                // If we're on a post type archive
     719                elseif ( is_post_type_archive() ) {
     720                        $title[] = post_type_archive_title( '', false );
     721                }
     722               
     723                // If it's a date archive
     724                elseif ( is_date() ) {
     725                        $month  = get_query_var('monthnum');
     726                        $day    = get_query_var('day');
     727
     728                        $t = '';
     729                        if ( !empty($month) ) {
     730                                $month = $wp_locale->get_month($month);
     731                                if ( !empty($day) )
     732                                        $t .= zeroise($day, 2) . ' ';
     733                                $t .= $month . ' ';
     734                        }
     735                        $title[] = $t . get_query_var('year');
     736                }
     737               
     738                // If it's a search
     739                elseif ( is_search() ) {
     740                        /* translators: 1: search phrase */
     741                        $title[] = sprintf(__('Search Results for "%1$s"'), strip_tags( get_query_var('s') ) );
     742                }
     743
     744                // If it's a 404 page
     745                elseif ( is_404() ) {
     746                        $title[] = __('Page not found');
     747                }
     748               
     749                // Add a page number if necessary:
     750                if ( $paged >= 2 || $page >= 2 )
     751                        $title[] = sprintf( __( 'Page %s' ), max( $paged, $page ) );
     752               
     753                if ( $show_sitename )
     754                        $title[] = get_bloginfo('name');
     755        }
     756        $title = apply_filters( 'wp_title_tag_array', $title );
     757
     758        // sep, defaults to - as the separator between two parts of the title
     759        $sep = '-';
     760        if ( isset($options['sep']) )
     761                $sep = $options['sep'];
     762
     763        $title = implode( " $sep ", $title );
     764       
     765        $title = apply_filters( 'wp_title_tag', $title, $sep );
     766        echo "<title>" . $title . "</title>\n";
     767}
     768
     769/**
    620770 * Display or retrieve page title for post.
    621771 *
    622772 * This is optimized for single.php template file for displaying the post title.
  • 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/twentyeleven/functions.php

     
    109109        // This theme uses Featured Images (also known as post thumbnails) for per-post/per-page Custom Header images
    110110        add_theme_support( 'post-thumbnails' );
    111111
     112        // Add support for Title tags
     113        // sep is the separator between parts of the title
     114        // show-sitename determines whether the sitename is shown (at the end of the title)
     115        // home-title sets the title for the homepage, which defaults to SITE NAME -sep- SITE DESCRIPTION
     116        // frontpage-title is used when the frontpage does not display the latest posts but a page instead
     117        add_theme_support( 'title-tag', array( 'sep' => '-', 'show-sitename' => true, 'home-title' => false, 'frontpage-title' => get_bloginfo('name') ) );
     118
    112119        // The next four constants set how Twenty Eleven supports custom headers.
    113120
    114121        // The default header text color