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

Ceci est ma fonction pour ajouter un filtre, il obtient un message d'erreur, comment le faire 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 changer ma 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;
 }
}
Jenny
la source

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. Le troisième est la priorité (quand la fonction est-elle déclenchée). Et le quatrième est la quantité de paramètres. Si vous définissez la quantité d'arguments, vous devez également les mettre 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 plus d'arguments (dans ce cas 3)

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

Lire tout le codex pour les 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 classe changez:

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

à:

add_filter( 'document_template', array( $this, 'my_template'), 10, 2  );
Rob Vermeer
la source
ajouter plus d'entrée dans la fonction my_template ne fonctionne pas non plus.
Jenny
Vous obtenez une erreur?
Rob Vermeer
oui, toutes les erreurs sont les mêmes: call_user_func_array s'attend à ce que le paramètre 1 soit un rappel valide, le tableau doit avoir exactement deux membres
Jenny
J'ai édité ma réponse. Si vous supprimez votre code, l'erreur a disparu, non?
Rob Vermeer
oui, je remplace mon code par celui-ci, ne fonctionnant toujours pas.
Jenny
2

Ceux-ci doivent correspondre, mais ne:

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

et

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

document_template ! = documents_template

Sinon, tout semble correct.

Éditer

Attendez, tout ne semble pas correct. Je ne pense pas que vous souhaitiez ajouter un paramètre à votre définition de fonction de rappel. Au lieu de cela, vous devez définir $templatedans le rappel, ou simplement le renvoyer sans modification. Alors, remplacez ceci:

function my_template( $template = '' ){

...avec ça:

function my_template(){

par 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 comme rappel:

function my_template( $path, $template ){

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

     return $path;
}
add_filter( 'documents_template','my_template', 10, 2 );
Chip Bennett
la source
désolé pour l'erreur de 'document' = 'documents'. Maintenant, avec votre nouvelle fonction, elle ne fonctionne toujours pas. erreur indique que call_user_func_array s'attend à ce que le paramètre 1 soit un rappel valide, le tableau doit avoir exactement deux membres
Jenny
Mon erreur; vous ne devez ajouter les paramètres à la définition de la fonction de rappel. Voir la réponse mise à jour.
Chip Bennett
Le nouveau code ne fonctionne pas non plus. J'ai essayé print_r, je peux voir que mon chemin est correct.
Jenny