如何将 add_filter 用于特定页面模板?
Posted
技术标签:
【中文标题】如何将 add_filter 用于特定页面模板?【英文标题】:How can I use add_filter for a specific page template? 【发布时间】:2011-06-26 11:45:34 【问题描述】:在 Wordpress 中,我有一个名为 designers.php
的页面模板。
加载时,它会读取slug
以获取唯一ID,然后调用数据库来检索设计者信息。
我想使用此信息来更改页面标题,使用标题标签中的设计者名称。
我尝试在我的designers.php
文件中使用add_filter
,但它不起作用:
add_filter('wp_title', 'set_page_title');
function set_page_title($title)
global $brand;
return 'Designer '.$brand['name'].' - '.get_bloginfo('name');
我猜add_filter
必须位于插件内或functions.php
文件中。
我怎样才能实现我想要做的事情?
更新
只要我使用wp_title
,该函数就不会被触发。如果我将其更改为init
(用于测试),则会触发该函数。
那么为什么add_filter
nor 对wp_title
有效?
【问题讨论】:
您使用的是哪个版本的 Wordpress? 【参考方案1】:首先add_filter
必须位于插件内部或functions.php
文件中。
那么,也许你必须为过滤器设置优先级:
add_filter('wp_title', 'set_page_title',1);
function set_page_title()
global $brand;
return 'Designer '.$brand['name'].' - '.get_bloginfo('name');
然后检查header.php
主题中的<title>
元数据。
<title><?php wp_title(); ?></title>
【讨论】:
【参考方案2】:你几乎是对的。过滤器必须驻留在 function.php 中,并被调用以修改标题。您可以有条件地添加过滤器。使用此函数is_page_template() 来确定 wordpress 是否正在呈现您的模板
尝试像这样修改你的函数:
add_filter('wp_title', 'set_page_title');
function set_page_title($title)
global $brand;
if (is_page_template('designer.php'))
return 'Designer '.$brand['name'].' - '.get_bloginfo('name');
else
return $title;
【讨论】:
@keatch - 这不起作用。我已将函数和add_filter
放在functions.php
中,但未调用该函数。在 IF 之前使用 echo 'TEST';
进行测试。
在我的安装中,这段代码运行良好!在调用您的函数之后,您是否有其他插件可以修改您的标题,例如 SEO 插件?要测试您的函数是否被调用,请尝试以下要点:gist.github.com/717a938919cf16c5854d。在您的页面中查看您的源代码!
@keatch - 据我所知,我没有其他可以修改标题的插件。没有 SEO 插件。在 gist 上测试了你的代码,没有输出(在源代码中):(
@keatch - 如果我将wp_title
更改为init
,它可以工作。输出$wp_query
。
不起作用的原因是 is_page() 和 is_page_template() 条件在循环内不起作用。如果你执行 wp_reset_query(),你可以在循环之后使用它们。这是一个记录不足的令人沮丧的细节。以上是关于如何将 add_filter 用于特定页面模板?的主要内容,如果未能解决你的问题,请参考以下文章
在Woocommerce中为特定产品类别使用自定义单一产品模板
如何将Django Rest API与BackboneJS前端集成用于单页面应用程序