如何更改标题中的分隔符

时间:2015-09-21 作者:IXN

更改标题分隔符。

我正在使用下划线初学者主题。我想对标题做个小改动。将分隔符从“Post title | site name”更改为“Post title-site name”

做这件事的简单方法是

 <title><?php wp_title(\'-\', true, \'right\' ); ?><?php bloginfo( \'name\' ); ?></title>
在标题中。但现在我读到了add_theme_support( \'title-tag\' );should not use 这个<title> 标题中的标记。

那么,有没有一种简单的方法来更改标题中的分隔符?

为什么这个问题不同于其他类似的问题:这实际上是关于最佳实践的,因为add_theme_support( \'title-tag\' ); 以及如何使用和修改它,因为我们不再应该使用<title> 标题中的标记。

[我真的希望我不必写8行代码来进行如此小的更改<title> 标签作为一个更简单的解决方案,我是否应该注释掉/删除add_theme_support( \'title-tag\' ); 来自函数。php?]

2 个回复
最合适的回答,由SO网友:cybmeta 整理而成

自WordPress 4.4wp_title 过滤器不工作,因为wp_title() 函数不再在core中使用。该函数被标记为已弃用,然后恢复到新通知,但theme authors are discouraged from using it. 因此,wp_title 如果继续使用,筛选器仍将工作wp_title() 直接在主题中运行,但不推荐使用。

当主题支持title-tag 已启用:

  1. pre_get_document_title
  2. document_title_parts
  3. document_title_separator.
由于您只想自定义分隔符,因此可以使用document_title_separator 具体如下:

add_filter( \'document_title_separator\', \'cyb_document_title_separator\' );
function cyb_document_title_separator( $sep ) {

    $sep = "-";

    return $sep;

}
上一个答案可以使用wp_title filter 要自定义<title> 标签

add_filter( \'wp_title\', \'customize_title_tag\', 10, 3 );
function customize_title_tag( $title, $sep, $seplocation ) {


    // Customize $title here.
    // Example taken from https://generatepress.com/forums/topic/title-tag-separator/
    $title = str_replace( \'|\', \'-\', $title );

    return $title;

}
如何使用此过滤器的更复杂示例(摘自Twentyle2主题):

function twentytwelve_wp_title( $title, $sep ) {
    global $paged, $page;

    if ( is_feed() )
        return $title;

    // Add the site name.
    $title .= get_bloginfo( \'name\' );

    // Add the site description for the home/front page.
    $site_description = get_bloginfo( \'description\', \'display\' );
    if ( $site_description && ( is_home() || is_front_page() ) )
        $title = "$title $sep $site_description";

    // Add a page number if necessary.
    if ( $paged >= 2 || $page >= 2 )
        $title = "$title $sep " . sprintf( __( \'Page %s\', \'twentytwelve\' ), max( $paged, $page ) );

    return $title;
}
add_filter( \'wp_title\', \'twentytwelve_wp_title\', 10, 2 );

SO网友:SnnSnn

自Wordpress v4以来,文档标题的生成方式发生了变化。4.0。现在wp_get_document_title 指示如何生成标题:

/**
 * Displays title tag with content.
 *
 * @ignore
 * @since 4.1.0
 * @since 4.4.0 Improved title output replaced `wp_title()`.
 * @access private
 */
function _wp_render_title_tag() {
    if ( ! current_theme_supports( \'title-tag\' ) ) {
        return;
    }

    echo \'<title>\' . wp_get_document_title() . \'</title>\' . "\\n";
}
下面是v5中的代码。4.2。以下是可用于操纵标题标记的过滤器:

function wp_get_document_title() {
    /**
    * Filters the document title before it is generated.
    *
    * Passing a non-empty value will short-circuit wp_get_document_title(),
    * returning that value instead.
    *
    * @since 4.4.0
    *
    * @param string $title The document title. Default empty string.
    */
    $title = apply_filters( \'pre_get_document_title\', \'\' );
    if ( ! empty( $title ) ) {
        return $title;
    }
    // --- snipped ---
    /**
    * Filters the separator for the document title.
    *
    * @since 4.4.0
    *
    * @param string $sep Document title separator. Default \'-\'.
    */
    $sep = apply_filters( \'document_title_separator\', \'-\' );

    /**
    * Filters the parts of the document title.
    *
    * @since 4.4.0
    *
    * @param array $title {
    *     The document title parts.
    *
    *     @type string $title   Title of the viewed page.
    *     @type string $page    Optional. Page number if paginated.
    *     @type string $tagline Optional. Site description when on home page.
    *     @type string $site    Optional. Site title when not on home page.
    * }
    */
    $title = apply_filters( \'document_title_parts\', $title );
    // --- snipped ---
    return $title;
}
所以这里有两种方法可以做到这一点。

第一个使用pre_get_document_title 如果您不打算更改当前标题,则过滤哪些内容会缩短标题生成,从而提高性能:

function custom_document_title( $title ) {
    return \'Here is the new title\';
}
add_filter( \'pre_get_document_title\', \'custom_document_title\', 10 );
第二种方式使用document_title_separatordocument_title_parts 在使用以下函数生成标题后,在函数中稍后执行的标题挂钩和标题分隔符single_term_titlepost_type_archive_title 根据页面和即将输出的内容:

// Custom function should return a string
function custom_seperator( $sep ) {
   return \'>\';
}
add_filter( \'document_title_separator\', \'custom_seperator\', 10 );

// Custom function should return an array
function custom_html_title( $title ) {
   return array(
     \'title\' => \'Custom Title\',
     \'site\'  => \'Custom Site\'
    );
}
add_filter( \'document_title_parts\', \'custom_html_title\', 10 );

相关推荐