Wordpress:应用过滤器自定义页面标题时回调函数中的错误

时间:2011-06-02 22:25:19

标签: wordpress filter callback hook page-title

我有一些模板需要根据用户选择自定义页面标题。我在Codex文档之后添加了一个过滤器钩子到'wp_title'标签,但是当应用过滤器时,我收到一个警告,我会说错误,关于回调函数声明中的参数:

警告:在第2行的/Applications/XAMPP/xamppfiles/htdocs/.../blog/wp-content/themes/.../inc/my_functions.php中缺少buildPageTitle()的参数4

my_functions.php

1  <?php
2  function buildPageTitle($sep, $echo, $seplocation, $brand) {
3    return $brand.$sep;
4  }
5  ...

模板

<?php
/*
Template Name: By brand-countries
*/

$brandLabel = get_query_var('brand');
require_once('inc/dbConn.php');
require_once('inc/get_brand_data.php');
require_once('inc/my_functions.php');

add_filter('wp_title', 'buildPageTitle', 10, 4);
apply_filters('wp_title', $sep, false, $seplocation, $brand);
get_header();
?>

我可以解决在buildPageTitle()函数中将$ brand var声明为全局的问题,但我更喜欢将其作为参数传递,因为在其他模板中将需要不同的变量

1 个答案:

答案 0 :(得分:1)

我认为你错误地了解WordPress过滤器的工作原理。有一个函数wp_title()和一个过滤器wp_title。您调用该函数,它可以创建一个标题,然后将其输出传递给过滤器,因此其他代码可以进一步自定义结果。

函数和过滤器不一定使用相同的参数。对于函数wp_title(),您可以传递分隔符,是否回显标题以及分隔符位置。过滤器可以获得wp_title()创建的标题,分隔符和分隔符位置。设置过滤器挂钩(通过add_filter())时,您可以指定所需的参数数量:1(默认值),2或3.由于wp_title()未通过,因此不能超过三个参数wp_title过滤器的三个以上参数。

所以你不必自己打电话给apply_filters()。您调用wp_title()(可能在您的header.php模板文件中,此函数会调用过滤器本身。

如果你想访问你的brand变量,你应该把它放在一个全局变量中,或者让你的buildPageTitle()函数调用一些其他函数来返回它。使用什么策略取决于您的情况。你能详细介绍一下你想在那里使用的不同模板和标题格式吗?