¿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;
 }
}

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  );

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 );

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.