如何将add_filter用于特定页面模板?

时间:2011-02-13 15:57:40

标签: wordpress filter

在Wordpress中,我有一个名为designers.php的页面模板。

加载时,会读取slug以获取uniqe ID,然后调用DB以检索设计器信息。
我想使用此信息来改变页面标题,使用标题标记中的设计器名称。

我已尝试在add_filter文件中使用designers.php,但它无效:

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也不适用于wp_title

2 个答案:

答案 0 :(得分:3)

你几乎是对的。过滤器必须位于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;
}

答案 1 :(得分: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');  
}

并查看<title>主题中的header.php元。

<title><?php wp_title(); ?></title>