¿Cómo agregar filtro con 2 argumentos?

9

Quiero modificar $ ruta 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, aparece un mensaje de error, ¿cómo hacerlo correctamente?

function my_template( $template = '' ){

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

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

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

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

Con las siguientes respuestas, mi nuevo filtro aún no funciona, entonces, ¿quizás 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;
 }
}
    
pregunta Jenny 19.01.2012 - 23:08

2 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 (cuando se activa la función). Y el cuarto es la cantidad de parámetros. Si define la cantidad de argumentos, también tiene que 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 funciona para mí. ¿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  );
    
respondido por el Rob Vermeer 19.01.2012 - 23:22
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 se ve bien. No creo que desee agregar un parámetro a la definición de la función de devolución de llamada. En su lugar, debe definir $template dentro de la devolución de llamada, o simplemente devolverlo sin modificar. Entonces, reemplaza esto:

function my_template( $template = '' ){

... con esto:

function my_template(){

por ejemplo:

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. Prueba esto como tu 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 );
    
respondido por el Chip Bennett 19.01.2012 - 23:24

Lea otras preguntas en las etiquetas