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