每个WordPress页面可以描述为有两个标题:
页面/帖子标题,通过the_title()
函数调用
html<title></title>
在浏览器顶部显示标题的标记
我正在编写一个插件,它可以在某一点上动态更改页面的标题(当然,它可以更改上述两个标题)。
因此,对于上面的步骤1,我找到了多个关于堆栈溢出的解决方案(例如this 或this). 这些仅适用于上面的步骤1。
对于步骤2,我发现this 解决方案简而言之,其工作原理如下:
add_filter(\'wp_title\', \'change_page_title\');
function change_page_title ($title) {
// Do some magic, and eventually modify $title then return it
return $title;
}
但建议的解决方案对我不起作用;不工作的意思是过滤器没有调用相关函数。我不确定问题出在哪里;是因为这个过滤器是从插件内部调用的,而不是从主题调用的吗?(仅供参考,我没有访问主题文件的权限,因此必须从插件内部完成)。
我如何才能做到这一点?如何在插件中动态更改页面的浏览器标题?
谢谢
最合适的回答,由SO网友:cybmeta 整理而成
一篇文章或页面只有一个标题,即标题标签<title>
是文档标题。
过滤器wp_title
过滤的输出wp_title()
函数,以前用于输出文档标题。在WordPress 4.1中,引入了主题中的标题标签支持,并且wp_get_document_title()
使用而不是wp_title()
. 如果你的主题支持title-tag
, wp_title
过滤器无效,但您可以使用其他过滤器:
pre_get_document_title
设置新标题
add_filter( \'pre_get_document_title\', \'cyb_change_page_title\' );
function cyb_change_page_title () {
return "Custom title";
}
document_title_separator
过滤标题分隔符
add_filter(\'document_title_separator\', \'cyb_change_document_title_separator\');
function cyb_change_document_title_separator ( $sep ) {
return "|";
}
documente_title_parts
过滤标题的不同部分:标题、页码、标语和网站名称。
add_filter( \'document_title_parts\', \'cyb_change_document_title_parts\' );
function cyb_change_document_title_parts ( $title_parts ) {
$title_parts[\'title\'] = \'Custom title\';
$title_parts[\'page\'] = 54;
$title_parts[\'tagline\'] = "Custom tagline";
$title_parts[\'site\'] = "My Site"; // When not on home page
return $title_parts;
}
PD:您可以使用
current_theme_supports( \'title-tag\' )
检查主题是否支持
title-tag
或者不是。