Wordpress: ошибка в функции обратного вызова при применении фильтра для настройки заголовка страницы - PullRequest
1 голос
/ 03 июня 2011

У меня есть несколько шаблонов, где мне нужно настроить заголовок страницы в соответствии с выбором пользователя.Я добавил хук фильтра к тегу 'wp_title', следуя документам Кодекса, но когда фильтр применяется, я получаю предупреждение, я скажу об ошибке, касающейся параметров в объявлении функции обратного вызова:

Предупреждение:Отсутствует аргумент 4 для buildPageTitle () в /Applications/XAMPP/xamppfiles/htdocs/.../blog/wp-content/themes/.../inc/my_functions.php в строке 2

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();
?>

Я могу решить проблему, объявив $ brand var глобальным в функции buildPageTitle (), но я предпочитаю передавать его как параметр, как в других шаблонах, отличающихся от других.понадобятся переменные

1 Ответ

1 голос
/ 05 июня 2011

Я думаю, вы неправильно поняли, как работают фильтры 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() функция вызывает другую функцию, которая ее возвращает. Какая стратегия зависит от вашей ситуации. Можете ли вы рассказать подробнее о различных шаблонах и форматах заголовков, которые вы хотите использовать там?

...