Как добавить фильтр с 2 аргументами?


9

Я хочу изменить $ path в следующем фильтре. Имеет 1 вход и 2 аргумента.

function documents_template( $template = '' ) {

       $path = DOCUMENTS_INCLUDES_DIR . '/document/' . $template;

  return apply_filters( 'document_template', $path, $template );
}

Это моя функция, чтобы добавить фильтр, он получает сообщение об ошибке, как сделать это правильно?

function my_template( $template = '' ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'document_template','my_template', 10, 2 );

Я попытался изменить свое возвращаемое значение следующим образом, оно тоже не работает:

return apply_filters( 'my_template', $path, $template);

С ответами ниже, мой новый фильтр все еще не работает, так что, может быть, это потому, что мой фильтр в классе? вот совершенно новый код:

Class My_Class{
  function __construct() {
     add_filter( 'document_template', array( $this, 'my_template',10, 2 ) );
  }
 function my_template( $path, $template ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
 }
}

Ответы:


10
function my_locate_template( $path, $template ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'documents_template','my_locate_template', 10, 2 );

add_filter принимает 4 переменные. Первое и второе обязательны. 1. название фильтра, 2. название функции. Третий - приоритет (когда срабатывает функция). И четвертое - это количество параметров. Если вы определяете количество аргументов, вы также должны поместить их в свою функцию. Например,

add_filter( 'the_filter','your_function', 10, 1 );
function your_function($var1) {
   // Do something
}

Если фильтр поддерживает больше аргументов (в данном случае 3)

   add_filter( 'the_filter','your_function', 10, 3 );
    function your_function($var1, $var2, $var3) {
       // Do somthing
    }

Прочитайте весь кодекс для информации о add_filter ()


function documents_template( $template = '' ) {

       $path = DOCUMENTS_INCLUDES_DIR . '/document/' . $template;

  return apply_filters( 'document_template', $path, $template );
}

function my_template( $path, $template ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'document_template','my_template', 10, 2 );

Этот код работает для меня. Ты пробовал это?


В вашем классе изменения:

add_filter( 'document_template', array( $this, 'my_template',10, 2 ) );

чтобы:

add_filter( 'document_template', array( $this, 'my_template'), 10, 2  );

добавить больше ввода в функцию my_template тоже не работает.
Дженни

Вы получаете ошибку?
Роб Вермеер

да, все ошибки одинаковы: call_user_func_array ожидает, что параметр 1 будет допустимым обратным вызовом, массив должен иметь ровно два члена
Jenny

Я отредактировал свой ответ. Если вы удалите свой код, ошибка исчезнет, ​​верно?
Роб Вермеер

да, я заменяю свой код этим, все еще не работает.
Дженни

2

Они должны соответствовать, но не:

apply_filters( 'document_template', $path, $template );

а также

add_filter( 'documents_template','my_template', 10, 2 );

document_template знак равно documents_template

В противном случае все выглядит правильно.

редактировать

Подождите, не все выглядит правильно. Я не думаю, что вы хотите добавить параметр в определение функции обратного вызова. Вместо этого вам нужно определить $templateобратный вызов или просто передать его без изменений. Итак, замените это:

function my_template( $template = '' ){

...с этим:

function my_template(){

например:

function my_template(){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'documents_template','my_template', 10, 2 );

Редактировать 2

Хорошо, небольшая ошибка с моей стороны. Попробуйте это как ваш обратный звонок:

function my_template( $path, $template ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'documents_template','my_template', 10, 2 );

извините за ошибку «документ» = «документы». Теперь с вашей новой функцией, она все еще не работает. ошибка говорит, что call_user_func_array ожидает, что параметр 1 будет допустимым обратным вызовом, массив должен иметь ровно два члена
Jenny

Моя ошибка; Вам действительно нужно добавить параметры в определении функции обратного вызова. Смотрите обновленный ответ.
Чип Беннетт

Новый код тоже не работает. Я попытался print_r, вижу мой путь правильный.
Дженни
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.