环境:WordPress 5.4.5和Yoast SEO 3.7.1
我是一个插件开发者,可以访问客户的网站。该网站安装了Yoast 3.7.1。这很重要吗?因为无论我做什么,我都不能更改404页面的title
?
现在在Stack Overflow的其他页面上,也有类似的问题(例如here,here和here),那些回答的人问header.php
是否正确嵌入了对wp_title()
的调用。下面是当前主题的header.php
中的内容:
<title><?php wp_title( '|', true, 'right' ); ?></title>
有趣的是,在我的 404.php 页面上,wp_get_document_title()
告诉我文档标题是 Page not found - XXXX,尽管上面的wp_title
调用将分隔符指定为|
。Yoast对标题的重写已经被禁用,所以我根本不确定那个破折号是从哪里来的。
我的插件做了一个REST调用,并从外部拉入内容以包含在页面中。其中一部分内容是要在title
中使用的文本。
在以前的客户端网站上,我已经能够做到以下几点:
add_filter('wp_title', 'change_404_title');
function change_404_title($title) {
if (is_404())
{
global $plugin_title;
if (!empty($plugin_title))
{
$title = $plugin_title;
}
}
return $title;
}
然而,在这个网站上,这是行不通的。
我已经尝试过了,基于正在使用的WordPress版本,挂钩pre_get_document_title
过滤器,即
add_filter('pre_get_document_title', 'change_404_title');
但又一次无济于事。我目前正在阅读Yoast...
3条答案
按热度按时间niwlg2el1#
wp_title
从4.4版开始就被弃用了。所以我们应该使用新的过滤器pre_get_document_title
。你的代码看起来不错,但是我对global $plugin_title
感到困惑。我宁愿让你先 * 尝试 * 一下:如果不起作用,那么尝试更改优先级以延迟执行函数。
icnyk63a2#
自WordPress v4.4.0以来,文档标题的生成方式发生了变化。现在
wp_get_document_title
规定了标题的生成方式:以下是v5.4.2的代码。这些是您可以用来操作title标签的过滤器:
这里有两种方法可以做到这一点。
第一个使用
pre_get_document_title
过滤器,它缩短了标题生成,因此如果您不打算对当前标题进行更改,则性能更高:第二种方式使用
document_title_separator
和document_title_parts
钩子来处理标题和标题分隔符,这些钩子在函数中稍后执行,在使用single_term_title
或post_type_archive_title
等函数生成标题之后,根据页面而定,并且在标题标签即将输出之前:11dmarpk3#
将其添加到您的functions.php
10 -是优先级的变化,以覆盖其他插件,如SEO