How to add filter with 2 args?

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?

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

Related posts

Leave a Reply

2 comments

  1. 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 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,

    add_filter( 'the_filter','your_function', 10, 1 );
    function your_function($var1) {
       // Do something
    }
    

    If the filter supports more arguments (in this case 3)

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

    Read all the codex for the information about 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 );
    

    This code works for me. Did you try this?


    In your class change:

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

    to:

    add_filter( 'document_template', array( $this, 'my_template'), 10, 2  );
    
  2. These need to match, but don’t:

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

    and

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

    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:

    function my_template( $template = '' ){
    

    …with this:

    function my_template(){
    

    e.g.:

    function my_template(){
    
          $path = MY_INCLUDES_DIR . '/document/'. $template;
    
         return $path;
    }
    add_filter( 'documents_template','my_template', 10, 2 );
    

    Edit 2

    Okay, minor mistake on my part. Try this as your callback:

    function my_template( $path, $template ){
    
          $path = MY_INCLUDES_DIR . '/document/'. $template;
    
         return $path;
    }
    add_filter( 'documents_template','my_template', 10, 2 );