经过一些试验后,我得出以下建议:可能是,该<title>
标签在您的父主题的标签中是“硬编码的” header.php
吗?如果是这种情况,您可以尝试<title>
从子主题的标签中删除标签header.php
(将父主题的标签复制header.php
到子主题文件夹中),然后通过以下方式添加主题支持functions.php
:
add_theme_support( 'title-tag' );
我将尝试解释是什么导致了我提出这个建议:我按照您和其他人的建议进行了尝试-但事实证明,我在源代码中找到了两个<title>
标签。第一个具有标准标题,第二个具有标准标题。但是(当然)在浏览器标题栏中,我只能看到默认标题。
然后,我检查了header.php
我使用的父主题的主题(二十四),并且该<title>
标签确实在该模板内进行了硬编码,如下所示:
<title><?php wp_title( '|', true, 'right' ); ?></title>
删除它之后,我将以下代码添加到了子主题中,functions.php
并且可以正常工作:
/**
* Theme support added
*/
function add_theme_support_child() {
add_theme_support( 'title-tag' );
}
add_action( 'after_setup_theme', 'add_theme_support_child', 11 );
/**
* Change the title of a page
*
*/
function change_title_for_a_template( $title ) {
// Check if current page template is 'template-homepage.php'
// if ( is_page_template( 'template-homepage.php' ) ) {
// change title parts here
$title['title'] = 'My Title';
$title['tagline'] = 'My fancy tagline'; // optional
$title['site'] = 'example.org'; //optional
// }
return $title;
}
add_filter( 'document_title_parts', 'change_title_for_a_template', 10, 1 );
因此,在<title>
从模板中删除标签之前,它基本上也可以工作-只是只有两个 <title>
标签,后面的标签被忽略了。您的主题可能会遇到同样的问题吗?
从wp 4.4.0开始,该<title>
标签是由该函数动态创建的,该函数_wp_render_title_tag()
基本上会调用另一个函数wp_get_document_title()
,并将html标签包装在结果周围。长话短说:如果你的主题header.php
缺少<title>
的标签,有机会,你可以直接通过覆盖标题pre_get_document_title
或document_title_parts
描述这里:
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');
}
//add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });
?这是添加主题支持的正确用法。