Comment ajouter un filtre avec 2 arguments?

9

Je souhaite modifier $ path dans le filtre suivant. Il a 1 entrée et 2 arguments.

function documents_template( $template = '' ) {

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

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

C’est ma fonction d’ajouter un filtre, un message d’erreur s’affiche, comment l’obtenir correctement?

function my_template( $template = '' ){

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

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

J'ai essayé de modifier la valeur de retour comme suit, cela ne fonctionne pas non plus:

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

Avec les réponses ci-dessous, mon nouveau filtre ne fonctionne toujours pas, alors, c’est peut-être parce que mon filtre est dans une classe? voici le tout nouveau 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;
 }
}
    
posée Jenny 19.01.2012 - 23:08

2 réponses

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 prend 4 variables. Le premier et le second sont obligatoires. 1. nom du filtre, 2. nom de la fonction. La troisième est la priorité (à quel moment la fonction est-elle déclenchée). Et le quatrième est la quantité de paramètres. Si vous définissez le nombre d'arguments, vous devez également les insérer dans votre fonction. Par exemple,

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

Si le filtre prend en charge plusieurs arguments (dans ce cas, 3)

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

Lisez tout le codex pour plus d'informations sur 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 );

Ce code fonctionne pour moi. Avez-vous essayé cela?

Dans votre changement de classe:

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

à:

add_filter( 'document_template', array( $this, 'my_template'), 10, 2  );
    
réponse donnée Rob Vermeer 19.01.2012 - 23:22
2

Celles-ci doivent correspondre, mais ne le faites pas:

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

et

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

document_template ! = documents_template

Sinon, tout semble correct.

Modifier

Attendez, tout ne semble pas correct. Je ne pense pas que vous souhaitiez ajouter un paramètre à la définition de votre fonction de rappel. Au lieu de cela, vous devez définir $template dans le rappel, ou simplement le renvoyer non modifié. Donc, remplacez ceci:

function my_template( $template = '' ){

... avec ceci:

function my_template(){

exemple:

function my_template(){

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

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

Modifier 2

D'accord, petite erreur de ma part. Essayez ceci en tant que rappel:

function my_template( $path, $template ){

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

     return $path;
}
add_filter( 'documents_template','my_template', 10, 2 );
    
réponse donnée Chip Bennett 19.01.2012 - 23:24

Lire d'autres questions sur les étiquettes