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.