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

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

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.