¿Cómo agregar filtro con 2 args?

9

Quiero modificar $ path en el siguiente filtro. Tiene 1 entrada y 2 args.

function documents_template( $template = '' ) {

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

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

Esta es mi función para agregar filtro, recibe un mensaje de error, ¿cómo hacerlo bien?

function my_template( $template = '' ){

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

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

Traté de cambiar mi valor de retorno de la siguiente manera, tampoco funciona:

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

Con las respuestas a continuación, mi nuevo filtro todavía no funciona, entonces, ¿tal vez es porque mi filtro está en una clase? Aquí está el código completamente nuevo:

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
fuente

Respuestas:

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 toma 4 variables. El primero y el segundo son obligatorios. 1. nombre del filtro, 2. nombre de la función. La tercera es la prioridad (cuándo se activa la función). Y el cuarto es la cantidad de parámetros. Si define la cantidad de argumentos, también debe ponerlos en su función. Por ejemplo,

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

Si el filtro admite más argumentos (en este caso 3)

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

Lea todo el códice para obtener información 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 me funciona. ¿Intentaste esto?


En tu cambio de clase:

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

a:

add_filter( 'document_template', array( $this, 'my_template'), 10, 2  );
Rob Vermeer
fuente
agregar más entradas en la función my_template tampoco funciona.
Jenny
¿Le da un error?
Rob Vermeer
sí, todos los errores son los mismos: call_user_func_array espera que el parámetro 1 sea una devolución de llamada válida, la matriz debe tener exactamente dos miembros
Jenny
Edité mi respuesta. Si elimina su código, el error desaparece, ¿verdad?
Rob Vermeer el
Sí, reemplazo mi código con esto, todavía no funciona.
Jenny
2

Estos deben coincidir, pero no:

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

y

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

document_template ! = documents_template

De lo contrario, todo parece correcto.

Editar

Espera, no todo parece correcto. No creo que quiera agregar un parámetro a su definición de función de devolución de llamada. En su lugar, debe definir $templatedentro de la devolución de llamada, o simplemente pasarlo sin modificar. Entonces, reemplace esto:

function my_template( $template = '' ){

...con este:

function my_template(){

p.ej:

function my_template(){

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

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

Editar 2

De acuerdo, un pequeño error de mi parte. Pruebe esto como devolución de llamada:

function my_template( $path, $template ){

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

     return $path;
}
add_filter( 'documents_template','my_template', 10, 2 );
Chip Bennett
fuente
perdón por el error de 'document' = 'documentos'. Ahora con su nueva función, todavía no funciona. el error dice que call_user_func_array espera que el parámetro 1 sea una devolución de llamada válida, la matriz debe tener exactamente dos miembros
Jenny
Mi error; usted no necesita agregar los parámetros para la definición de la función de devolución de llamada. Ver respuesta actualizada.
Chip Bennett
El nuevo código tampoco funciona. Intenté print_r, puedo ver que mi ruta es correcta.
Jenny