从插件内动态更改页面标题

时间:2016-12-24 作者:Greeso

每个WordPress页面可以描述为有两个标题:

页面/帖子标题,通过the_title() 函数调用

html<title></title> 在浏览器顶部显示标题的标记

我正在编写一个插件,它可以在某一点上动态更改页面的标题(当然,它可以更改上述两个标题)。

因此,对于上面的步骤1,我找到了多个关于堆栈溢出的解决方案(例如thisthis). 这些仅适用于上面的步骤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;
}
但建议的解决方案对我不起作用;不工作的意思是过滤器没有调用相关函数。我不确定问题出在哪里;是因为这个过滤器是从插件内部调用的,而不是从主题调用的吗?(仅供参考,我没有访问主题文件的权限,因此必须从插件内部完成)。

我如何才能做到这一点?如何在插件中动态更改页面的浏览器标题?

谢谢

2 个回复
最合适的回答,由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 或者不是。

SO网友:pankaj choudhary

在您的页面上使用此代码。要更改的php或页面<pre> <title><?php wp_title(); ?> | <?php bloginfo(‘name’); ?></title> </pre>

相关推荐

Remove post if exist by title

我想按标题从PHP中删除一篇文章。如果帖子按标题存在,我有一个发布或更新的代码,但我不知道如何插入wp_delete_post() function.这是我发布或更新帖子的实际代码(如果帖子按标题存在):<?php // require wp-load.php to use built-in WordPress functions require_once("/var/www/mysite.com/wp-load.php"); //Title&#