Come aggiungere un filtro con 2 args?


9

Voglio modificare $ path nel seguente filtro. Ha 1 input e 2 args.

function documents_template( $template = '' ) {

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

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

Questa è la mia funzione per aggiungere un filtro, riceve un messaggio di errore, come ottenerlo giusto?

function my_template( $template = '' ){

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

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

Ho provato a modificare il mio valore di ritorno come segue, non funziona neanche:

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

Con le risposte di seguito, il mio nuovo filtro non funziona ancora, quindi forse è perché il mio filtro è in una classe? ecco il codice completamente nuovo:

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

Risposte:


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 accetta 4 variabili. Sono richiesti il ​​primo e il secondo. 1. nome del filtro, 2. nome della funzione. La terza è la priorità (quando viene attivata la funzione). E il quarto è la quantità di parametri. Se definisci la quantità di argomenti devi anche metterli nella tua funzione. Per esempio,

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

Se il filtro supporta più argomenti (in questo caso 3)

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

Leggi tutto il codice per le informazioni su 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 );

Questo codice funziona per me. Hai provato questo?


Nel cambio di classe:

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

per:

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

aggiungere ulteriori input nella funzione my_template non funziona neanche.
Jenny,

Ricevi un errore?
Rob Vermeer,

sì, tutti gli errori sono uguali: call_user_func_array prevede che il parametro 1 sia un callback valido, l'array deve avere esattamente due membri
Jenny,

Ho modificato la mia risposta. Se rimuovi il codice, l'errore scompare, giusto?
Rob Vermeer,

sì, sostituisco il mio codice con questo, ancora non funziona.
Jenny,

2

Questi devono corrispondere, ma non:

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

e

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

document_template ! = documents_template

Altrimenti, tutto sembra corretto.

modificare

Aspetta, non tutto sembra corretto. Non penso che tu voglia aggiungere un parametro alla definizione della tua funzione di callback. Invece, è necessario definire $templateall'interno del callback o semplicemente passarlo indietro non modificato. Quindi, sostituisci questo:

function my_template( $template = '' ){

...con questo:

function my_template(){

per esempio:

function my_template(){

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

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

Modifica 2

Ok, piccolo errore da parte mia. Prova questo come callback:

function my_template( $path, $template ){

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

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

scusate l'errore di 'document' = 'documenti'. Ora con la tua nuova funzione, non funziona ancora. errore dice che call_user_func_array prevede che il parametro 1 sia un callback valido, l'array deve avere esattamente due membri
Jenny

Errore mio; si fa necessario aggiungere i parametri per la definizione funzione di callback. Vedi la risposta aggiornata.
Chip Bennett,

Neanche il nuovo codice funziona. Ho provato print_r, posso vedere il mio percorso è corretto.
Jenny,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.