Wordpress:应用筛选器自定义页面标题时回调函数出错
我有一些模板,我需要根据用户选择自定义页面标题。我已经在Codex文档后面的“wp_title”标记中添加了一个过滤器挂钩,但是当应用过滤器时,我收到一个警告,我会说是一个错误,关于回调函数声明中的参数: 警告:第2行的/Applications/XAMPP/xamppfiles/htdocs/../blog/wp content/themes/../inc/my_functions.php中缺少buildPageTitle()的参数4 my_functions.phpWordpress:应用筛选器自定义页面标题时回调函数出错,wordpress,filter,callback,hook,page-title,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
1 <?php
2 function buildPageTitle($sep, $echo, $seplocation, $brand) {
3 return $brand.$sep;
4 }
5 ...
1
我可以解决在buildPageTitle()函数中将$brand变量声明为全局变量的问题,但我更喜欢将其作为参数传递,因为在其他模板中需要不同的变量我认为您对WordPress过滤器的工作方式有错误的认识。有一个函数
wp\u title()
和一个过滤器wp\u title
。调用函数,该函数执行一些创建标题的工作,然后将其输出传递给过滤器,以便其他代码可以进一步自定义结果
函数和筛选器不一定使用相同的参数。对于函数wp_title()
,可以传递分隔符、是否回显标题以及分隔符位置。过滤器可以在wp\u title()
创建标题时获取标题、分隔符和分隔符位置。设置筛选器挂钩时(通过添加\u filter()
),可以指定需要的参数数量:1(默认)、2或3。无法获取三个以上的参数,因为wp\u title()
向wp\u title
筛选器传递的参数不超过三个
因此,您不必自己调用apply\u filters()
。调用wp\u title()
(可能在header.php
模板文件中,此函数调用过滤器本身
如果要访问
品牌
变量,应将其放入全局变量中,或让buildPageTitle()
function调用其他将返回它的函数。使用什么策略取决于您的情况。您能详细介绍一下不同的模板和您想在那里使用的标题格式吗?我认为您对WordPress过滤器的工作原理有一个错误的想法。有一个函数wp\u title()
和过滤器wp\u title
。调用函数,该函数执行一些创建标题的工作,然后将其输出传递给过滤器,以便其他代码可以进一步自定义结果
函数和筛选器不一定使用相同的参数。对于函数wp_title()
,您可以传递分隔符、是否回显标题以及分隔符位置。筛选器可以将标题作为wp_title()获取
已经创建了它、分隔符和分隔符位置。设置筛选器挂钩(通过添加\u filter()
)时,您可以指定需要的参数数量:1(默认)、2或3。您不能获得三个以上的参数,因为wp\u title()
没有向wp\u title
筛选器传递三个以上的参数
因此,您不必自己调用apply\u filters()
。您可以调用wp\u title()
(可能在header.php
模板文件中,此函数调用过滤器本身
如果要访问
品牌
变量,应将其放入全局变量中,或让buildPageTitle()
function调用其他将返回它的函数。使用什么策略取决于您的情况。您能告诉我们更多关于不同模板和标题格式的信息吗?Jan:非常感谢您的帮助。我打电话给apply_filters()因为我从文档中了解到,它将允许我传递其他参数。最后我使用了全局变量;标题格式类似于:DIOR stores locator、DIOR stores locator in FRANCE等等,其中品牌、国家和城市因用户选择而异简:非常感谢您的帮助。我调用了apply_filters()因为我从文档中了解到,它将允许我传递其他参数。最后,我使用了全局VAR;标题格式类似于:DIOR stores locator、DIOR stores locator in FRANCE等等,其中品牌、国家和城市因用户选择而异
<?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();
?>