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

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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.