web-dev-qa-db-fra.com

Comment ajouter un filtre à 2 arguments?

Je veux 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 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 changer ma valeur de retour comme suit, cela ne fonctionne pas non plus:

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

Avec les réponses suivantes, 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;
 }
}
9
Jenny
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 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 supporte plus d'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 ton changement de classe:

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

à:

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

Ceux-ci doivent correspondre, mais ne le font 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é. 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

Ok, 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 );
2
Chip Bennett