Jak dodać filtr z 2 argumentami?


9

Chcę zmodyfikować ścieżkę $ w następującym filtrze. Ma 1 wejście i 2 argumenty.

function documents_template( $template = '' ) {

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

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

To jest moja funkcja dodawania filtra, pojawia się komunikat o błędzie, jak to zrobić poprawnie?

function my_template( $template = '' ){

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

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

Próbowałem zmienić wartość zwracaną w następujący sposób, to też nie działa:

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

Biorąc pod uwagę poniższe odpowiedzi, mój nowy filtr nadal nie działa, więc może dlatego, że mój filtr jest w klasie? oto zupełnie nowy kod:

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

Odpowiedzi:


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 przyjmuje 4 zmienne. Wymagane są pierwsze i drugie. 1. nazwa filtra, 2. nazwa funkcji. Trzeci jest priorytetem (kiedy funkcja zostanie uruchomiona). A czwarta to ilość parametrów. Jeśli zdefiniujesz liczbę argumentów, musisz także umieścić je w swojej funkcji. Na przykład,

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

Jeśli filtr obsługuje więcej argumentów (w tym przypadku 3)

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

Przeczytaj cały kodeks, aby uzyskać informacje o 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 );

Ten kod działa dla mnie. Próbowałeś tego?


W twojej klasie zmień:

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

do:

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

dodaj więcej danych wejściowych w funkcji my_template też nie działa.
— Jenny

Czy pojawia się błąd?
— Rob Vermeer

tak, wszystkie błędy są takie same: call_user_func_array oczekuje, że parametr 1 będzie prawidłowym wywołaniem zwrotnym, tablica musi mieć dokładnie dwóch członków
— Jenny

Zredagowałem swoją odpowiedź. Jeśli usuniesz kod, błąd zniknie, prawda?
— Rob Vermeer,

tak, zamieniam mój kod na ten, nadal nie działa.
— Jenny

2

Te muszą się zgadzać, ale nie:

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

i

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

document_template ! = documents_template

W przeciwnym razie wszystko wygląda poprawnie.

Edytować

Czekaj, nie wszystko wygląda poprawnie. Nie sądzę, że chcesz dodać parametr do definicji funkcji zwrotnej. Zamiast tego musisz zdefiniować $templatew ramach wywołania zwrotnego lub po prostu przekazać go bez modyfikacji. Więc zamień to:

function my_template( $template = '' ){

...z tym:

function my_template(){

na przykład:

function my_template(){

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

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

Edytuj 2

Okej, drobny błąd z mojej strony. Spróbuj tego jako oddzwaniania:

function my_template( $path, $template ){

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

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

przepraszam za błąd „dokument” = „dokumenty”. Teraz dzięki nowej funkcji nadal nie działa. błąd mówi, że call_user_func_array oczekuje, że parametr 1 będzie prawidłowym wywołaniem zwrotnym, tablica musi mieć dokładnie dwóch członków
— Jenny

Mój błąd; Państwo nie trzeba dodawać parametry do definicji funkcji oddzwaniania. Zobacz zaktualizowaną odpowiedź.
— Chip Bennett,

Nowy kod też nie działa. Próbowałem print_r, widzę, że moja ścieżka jest poprawna.
— Jenny
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.