Як додати фільтр з 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 буде дійсним зворотним дзвінком, масив повинен містити рівно двох членів
Дженні

Я відредагував свою відповідь. Якщо ви видалите код, помилка зникла, правда?
Роб Вермер

так, я замінюю свій код цим, все ще не працює.
Дженні

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

вибачте за помилку 'document' = 'документи'. Тепер з вашою новою функцією вона все ще не працює. Помилка каже, що call_user_func_array очікує, що параметр 1 буде дійсним зворотним дзвінком, масив повинен містити рівно двох членів
Дженні

Моя помилка; Вам дійсно потрібно додати параметри у визначенні функції зворотного виклику. Дивіться оновлену відповідь.
Чіп Беннетт

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