我有一些模板需要根据用户选择自定义页面标题。我在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声明为全局的问题,但我更喜欢将其作为参数传递,因为在其他模板中将需要不同的变量
答案 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()
函数调用一些其他函数来返回它。使用什么策略取决于您的情况。你能详细介绍一下你想在那里使用的不同模板和标题格式吗?