Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress:应用筛选器自定义页面标题时回调函数出错_Wordpress_Filter_Callback_Hook_Page Title - Fatal编程技术网

Wordpress:应用筛选器自定义页面标题时回调函数出错

Wordpress:应用筛选器自定义页面标题时回调函数出错,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

我有一些模板,我需要根据用户选择自定义页面标题。我已经在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  ...
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();
?>