Como adicionar filtro com 2 args?

9

Quero modificar $ path no seguinte filtro. Possui 1 entrada e 2 args.

function documents_template( $template = '' ) {

       $path = DOCUMENTS_INCLUDES_DIR . '/document/' . $template;

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

Esta é a minha função de adicionar filtro, recebe uma mensagem de erro, como fazer isso certo?

function my_template( $template = '' ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'document_template','my_template', 10, 2 );

Tentei alterar meu valor de retorno da seguinte forma: também não funciona:

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

Com as respostas a seguir, meu novo filtro ainda não está funcionando. Talvez seja porque meu filtro esteja em uma classe? aqui está o código completamente novo:

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

Respostas:

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 aceita 4 variáveis. O primeiro e o segundo são obrigatórios. 1. nome do filtro, 2. nome da função. A terceira é a prioridade (quando a função é acionada). E o quarto é a quantidade de parâmetros. Se você definir a quantidade de argumentos, também precisará colocá-los em sua função. Por exemplo,

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

Se o filtro suportar mais argumentos (neste caso, 3)

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

Leia todo o codex para obter informações sobre 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 );

Este código funciona para mim. Você tentou isso?


Na sua aula, mude:

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

para:

add_filter( 'document_template', array( $this, 'my_template'), 10, 2  );
Rob Vermeer
fonte
adicionar mais entrada na função my_template também não funciona.
21912 Jenny
Voce encontrou um erro?
Rob Vermeer
sim, todo o erro é o mesmo: espera call_user_func_array parâmetro 1 para ser um callback válido, matriz deve ter exatamente dois membros
Jenny
Eu editei minha resposta. Se você remover seu código, o erro desapareceu, certo?
22612 Rob Robermeme
sim, substituo meu código por este, ainda não funcionando.
21912 Jenny
2

Eles precisam corresponder, mas não:

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

e

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

document_template ! = documents_template

Caso contrário, tudo parece correto.

Editar

Espere, nem tudo parece correto. Eu não acho que você deseja adicionar um parâmetro à sua definição de função de retorno de chamada. Em vez disso, você precisa definir $templatedentro do retorno de chamada ou simplesmente devolvê-lo sem modificação. Então, substitua isto:

function my_template( $template = '' ){

...com isso:

function my_template(){

por exemplo:

function my_template(){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'documents_template','my_template', 10, 2 );

Editar 2

Ok, pequeno erro da minha parte. Tente isso como seu retorno de chamada:

function my_template( $path, $template ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'documents_template','my_template', 10, 2 );
Chip Bennett
fonte
desculpe pelo erro de 'document' = 'documents'. Agora, com sua nova função, ela ainda não está funcionando. erro diz espera call_user_func_array parâmetro 1 para ser um callback válido, matriz deve ter exatamente dois membros
Jenny
Meu erro; você não precisa adicionar os parâmetros para a definição da função de retorno de chamada. Veja a resposta atualizada.
Chip Bennett
O novo código também não está funcionando. Eu tentei print_r, posso ver meu caminho está correto.
21912 Jenny