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.