Wie füge ich einen Filter mit 2 Argumenten hinzu?

9

Ich möchte $ path im folgenden Filter ändern. Es hat 1 Eingang und 2 Argumente.

function documents_template( $template = '' ) {

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

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

Dies ist meine Funktion, um Filter hinzuzufügen, es wird eine Fehlermeldung angezeigt, wie man es richtig macht?

function my_template( $template = '' ){

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

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

Ich habe versucht, meinen Rückgabewert wie folgt zu ändern, es funktioniert auch nicht:

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

Mit den folgenden Antworten funktioniert mein neuer Filter immer noch nicht. Vielleicht liegt es daran, dass mein Filter in einer Klasse ist? Hier ist der völlig neue Code:

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

Antworten:

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 akzeptiert 4 Variablen. Der erste und der zweite sind erforderlich. 1. Name des Filters, 2. Name der Funktion. Die dritte ist die Priorität (wann wird die Funktion ausgelöst). Und der vierte ist die Anzahl der Parameter. Wenn Sie die Anzahl der Argumente definieren, müssen Sie diese auch in Ihre Funktion einfügen. Zum Beispiel,

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

Wenn der Filter mehr Argumente unterstützt (in diesem Fall 3)

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

Lesen Sie den gesamten Codex, um Informationen zu add_filter () zu erhalten.


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

Dieser Code funktioniert für mich. Hast du das versucht?


In Ihrer Klasse wechseln:

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

zu:

add_filter( 'document_template', array( $this, 'my_template'), 10, 2  );
Rob Vermeer
quelle
Hinzufügen weiterer Eingaben in die Funktion my_template funktioniert ebenfalls nicht.
Jenny
Erhalten Sie einen Fehler?
Rob Vermeer
Ja, alle Fehler sind gleich: call_user_func_array erwartet, dass Parameter 1 ein gültiger Rückruf ist. Das Array muss genau zwei Mitglieder haben
Jenny
Ich habe meine Antwort bearbeitet. Wenn Sie Ihren Code entfernen, ist der Fehler weg, richtig?
Rob Vermeer
Ja, ich ersetze meinen Code durch diesen, der immer noch nicht funktioniert.
Jenny
2

Diese müssen übereinstimmen, aber nicht:

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

und

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

document_template ! = documents_template

Ansonsten sieht alles richtig aus.

Bearbeiten

Warten Sie, nicht alles sieht richtig aus. Ich glaube nicht, dass Sie Ihrer Rückruffunktionsdefinition einen Parameter hinzufügen möchten. Stattdessen müssen Sie $templateinnerhalb des Rückrufs definieren oder ihn einfach unverändert zurückgeben. Ersetzen Sie also Folgendes:

function my_template( $template = '' ){

...mit diesem:

function my_template(){

z.B:

function my_template(){

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

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

Bearbeiten 2

Okay, kleiner Fehler meinerseits. Versuchen Sie dies als Ihren Rückruf:

function my_template( $path, $template ){

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

     return $path;
}
add_filter( 'documents_template','my_template', 10, 2 );
Chip Bennett
quelle
Entschuldigung für den Fehler 'document' = 'documents'. Jetzt mit Ihrer neuen Funktion funktioniert es immer noch nicht. Fehler sagt, call_user_func_array erwartet, dass Parameter 1 ein gültiger Rückruf ist, Array muss genau zwei Mitglieder haben
Jenny
Mein Fehler; Sie tun müssen , um die Parameter der Callback - Funktion Definition hinzuzufügen. Siehe aktualisierte Antwort.
Chip Bennett
Der neue Code funktioniert auch nicht. Ich habe print_r ausprobiert und kann sehen, dass mein Pfad korrekt ist.
Jenny