Como adicionar filtro com 2 args?

9

Eu quero modificar $ caminho no seguinte filtro. Tem 1 entrada e 2 args.

function documents_template( $template = '' ) {

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

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

Esta é minha função para adicionar filtro, recebe uma mensagem de erro, como acertar?

function my_template( $template = '' ){

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

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

Eu tentei alterar meu valor de retorno da seguinte forma: ele não funciona:

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

Com as respostas abaixo, meu novo filtro ainda não está funcionando, então talvez seja porque meu filtro está 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;
 }
}
    
por Jenny 19.01.2012 / 23:08

2 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 leva 4 variáveis. O primeiro e o segundo são obrigatórios. 1. nome do filtro, 2. nome da função. O terceiro é 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 suporta mais argumentos (neste caso 3)

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

Leia todo o códice 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 );

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

Na sua alteração de turma:

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

para:

add_filter( 'document_template', array( $this, 'my_template'), 10, 2  );
    
por Rob Vermeer 19.01.2012 / 23:22
2

Estes 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 $template no retorno de chamada ou simplesmente repassá-lo sem modificações. Então, substitua isso:

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, um 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 );
    
por Chip Bennett 19.01.2012 / 23:24

Tags