php – wp_title过滤器对标记没有任何影响

我刚刚在我的主题functions.PHP文件添加了以下过滤器:

function change_the_title() {
    return 'My modified title';
}
add_filter('wp_title', 'change_the_title');

在我的header.PHP中:

<!DOCTYPE html>
<html <?phP Language_attributes(); ?>>
<head>
    <Meta charset="<?PHP bloginfo( 'charset' ); ?>">
    <Meta id="viewport" name="viewport" content="width=device-width">
    <link rel="profile" href="http://gmpg.org/xfn/11">
    <link rel="pingback" href="<?PHP bloginfo( 'pingback_url' ); ?>">
    <?PHP wp_head(); ?>
</head>
<body <?PHP body_class();?>>

然后,我发现我的页面标题没有改变!标题标签是在wp_head函数中注入的.

更多,如果我在标题中手动调用函数wp_title,它确实返回预期值.

怎么了?我该如何解决这个问题?

另外:我的wordpress版本是4.4.

解决方法:

我终于发现wordpress核心代码已更改,请参阅下面的代码.

/**
 * 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";
}

因此,在4.4之后,核心不会将wp_title结果注入标题< title>标记,但使用新函数wp_get_document_title执行相同的操作.

相反,我们可以通过以下方式做同样的事情:

1.直接更改标题

add_filter('pre_get_document_title', 'change_the_title');
function change_the_title() {
    return 'The expected title';
}

2.过滤标题部分:

add_filter('document_title_parts', 'filter_title_part');
function filter_title_part($title) {
    return array('a', 'b', 'c');
}

有关详细信息,请参阅此处的详细信息:https://developer.wordpress.org/reference/functions/wp_get_document_title/

PS: Looking into the source of function wp_get_document_title is a good idea, the hooks inside which tells a lot.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...