I want to modify $path in the following filter. It has 1 input and 2 args.
function documents_template( $template = '' ) {
$path = DOCUMENTS_INCLUDES_DIR . '/document/' . $template;
return apply_filters( 'document_template', $path, $template );
}
This is my function to add filter, it gets error message, how to get it right?
function my_template( $template = '' ){
$path = MY_INCLUDES_DIR . '/document/'. $template;
return $path;
}
add_filter( 'document_template','my_template', 10, 2 );
I tried to change my return value as following, it doesn’t work either:
return apply_filters( 'my_template', $path, $template);
With the belowing answers, my new filter still not working, so, maybe it’s because my filter is in a class? here’s the completely new 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;
}
}
add_filter takes 4 variables. The first and second are required. 1. name of the filter, 2. name of the function.
The third is the priority (when does the function gets fired). And the fourth is the amount of parameters. If you define the amount of arguments you also have to put them in your function. For example,
If the filter supports more arguments (in this case 3)
Read all the codex for the information about add_filter()
This code works for me. Did you try this?
In your class change:
to:
These need to match, but don’t:
and
document_template
!=documents_template
Otherwise, everything looks correct.
Edit
Wait, not everything looks correct. I don’t think you want to add a parameter to your callback function definition. Instead, you need to define
$template
within the callback, or simply pass it back unmodified. So, replace this:…with this:
e.g.:
Edit 2
Okay, minor mistake on my part. Try this as your callback: