wp_title筛选器对<标题>标签没有影响

2022-08-30 22:57:35

我刚刚在我的主题文件中添加了以下过滤器: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。


答案 1

我终于发现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:研究函数的源代码是个好主意,里面的钩子告诉了很多。wp_get_document_title


答案 2

不确定是否需要注入变量,但请尝试此操作。

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

推荐