Make WordPress Core

Ticket #18548: 18548.5.diff

File 18548.5.diff, 4.0 KB (added by obenland, 10 years ago)

wp_title() wrapper with prettify-callback

  • src/wp-includes/default-filters.php

     
    155155
    156156add_filter( 'wp_sprintf', 'wp_sprintf_l', 10, 2 );
    157157
     158add_filter( 'wp_title', '_wp_enhance_title_output', 10, 2 );
     159
    158160// RSS filters
    159161add_filter( 'the_title_rss',      'strip_tags'      );
    160162add_filter( 'the_title_rss',      'ent2ncr',      8 );
     
    196198add_filter( 'http_request_host_is_external', 'allowed_http_request_hosts', 10, 2 );
    197199
    198200// Actions
     201add_action( 'wp_head',             '_wp_render_title_tag',            1     );
    199202add_action( 'wp_head',             'wp_enqueue_scripts',              1     );
    200203add_action( 'wp_head',             'feed_links',                      2     );
    201204add_action( 'wp_head',             'feed_links_extra',                3     );
  • src/wp-includes/general-template.php

     
    731731}
    732732
    733733/**
     734 * Display <title> tag with contents.
     735 *
     736 * @since 4.1.0
     737 * @access private
     738 */
     739function _wp_render_title_tag() {
     740        if ( ! current_theme_supports( 'title-tag' ) ) {
     741                return;
     742        }
     743
     744        // This can only work internally on wp_head.
     745        if ( ! did_action( 'wp_head' ) && ( ! function_exists( 'doing_action' ) || ! doing_action( 'wp_head' ) ) ) {
     746                return;
     747        }
     748
     749        echo "<title>" . wp_title( '|', false, 'right' ) . "</title>\n";
     750}
     751
     752/**
     753 * Filters wp_title to return a neat <title> tag content based on what is being viewed.
     754 *
     755 * @since 4.1.0
     756 * @access private
     757 *
     758 * @param string $title Default title text for current view.
     759 * @param string $sep   Optional separator.
     760 * @return string The filtered title.
     761 */
     762function _wp_enhance_title_output( $title, $sep ) {
     763        if ( ! current_theme_supports( 'title-tag' ) || is_feed() ) {
     764                return $title;
     765        }
     766
     767        global $page, $paged;
     768
     769        // Add the blog name
     770        $title .= get_bloginfo( 'name', 'display' );
     771
     772        // Add the blog description for the home/front page.
     773        $site_description = get_bloginfo( 'description', 'display' );
     774        if ( $site_description && ( is_home() || is_front_page() ) ) {
     775                $title .= " $sep $site_description";
     776        }
     777
     778        // Add a page number if necessary:
     779        if ( ( $paged >= 2 || $page >= 2 ) && ! is_404() ) {
     780                $title .= " $sep " . sprintf( __( 'Page %s' ), max( $paged, $page ) );
     781        }
     782
     783        return $title;
     784}
     785
     786/**
    734787 * Display or retrieve page title for all areas of blog.
    735788 *
    736789 * By default, the page title will display the separator before the page title,
  • src/wp-includes/theme.php

     
    16071607                                define( 'BACKGROUND_IMAGE', $args[0]['default-image'] );
    16081608
    16091609                        break;
     1610
     1611                // Ensure that 'title-tag' is accessible in the admin.
     1612                case 'title-tag' :
     1613                        if ( function_exists( 'doing_action' )
     1614                           && ! doing_action( 'after_setup_theme' ) // can be called here
     1615                           && ! doing_action( 'init' ) // can also be called here
     1616                           && ( doing_action() || did_action( 'wp_loaded' ) ) // can be called in functions.php but must happen before wp_loaded, i.e. not in header.php
     1617                        ) {
     1618                                _doing_it_wrong( "add_theme_support( 'title-tag' )", __( "You need to add support before 'wp_loaded'." ), '4.1.0' );
     1619                        }
     1620                        break;
    16101621        }
    16111622
    16121623        $_wp_theme_features[ $feature ] = $args;
     
    17591770        if ( !isset( $_wp_theme_features[$feature] ) )
    17601771                return false;
    17611772
     1773        if ( 'title-tag' == $feature ) {
     1774                // Don't confirm support unless called internally.
     1775                $trace = debug_backtrace();
     1776                if ( ! in_arraY( $trace[1]['function'], array( '_wp_render_title_tag', '_wp_enhance_title_output' ) ) ) {
     1777                        return false;
     1778                }
     1779        }
     1780
    17621781        // If no args passed then no extra checks need be performed
    17631782        if ( func_num_args() <= 1 )
    17641783                return true;