1

我有一些模板需要根据用户选择自定义页面标题。我在 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 声明为全局变量的问题,但我更喜欢将它作为参数传递,因为在其他模板中需要不同的变量

4

1 回答 1

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()函数调用一些其他的函数来返回它。使用什么策略取决于您的情况。你能详细介绍一下你想在那里使用的不同模板和标题格式吗?

于 2011-06-05T16:05:09.250 回答