2 argümanlı filtre nasıl eklenir?


9

Aşağıdaki filtrede $ yolunu değiştirmek istiyorum. 1 giriş ve 2 argüman vardır.

function documents_template( $template = '' ) {

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

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

Bu filtre eklemek için benim fonksiyonum, hata mesajı alır, nasıl doğru alınır?

function my_template( $template = '' ){

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

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

Dönüş değerimi aşağıdaki gibi değiştirmeye çalıştım, ya da çalışmıyor:

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

Aşağıdaki cevaplarla, yeni filtrem hala çalışmıyor, bu yüzden belki de filtrem bir sınıfta mı? İşte tamamen yeni kod:

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

Yanıtlar:


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 4 değişken alır. Birinci ve ikinci gereklidir. 1. filtrenin adı, 2. işlevin adı. Üçüncüsü önceliktir (işlev ne zaman tetiklenir). Ve dördüncüsü parametre miktarıdır. Argüman miktarını tanımlarsanız, bunları fonksiyonunuza da koymanız gerekir. Örneğin,

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

Filtre daha fazla bağımsız değişkeni destekliyorsa (bu durumda 3)

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

Add_filter () ile ilgili tüm kodları okuyun


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

Bu kod benim için çalışıyor. Bunu denedin mi?


Sınıf değişikliğinizde:

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

için:

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

my_template işlevine daha fazla girdi eklemek de çalışmıyor.
Jenny

bir hata alıyor musun?
Rob Vermeer

evet, tüm hatalar aynı: call_user_func_array, parametre 1'in geçerli bir geri arama olmasını bekler, dizinin tam olarak iki üyesi olmalıdır
Jenny

Cevabımı düzenledim. Kodunuzu kaldırırsanız hata gitti demektir, değil mi?
Rob Vermeer

Evet, kodumu bununla değiştiriyorum, hala çalışmıyor.
Jenny

2

Bunların eşleşmesi gerekir, ancak şunları yapmaz:

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

ve

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

document_template ! = documents_template

Aksi takdirde, her şey doğru görünüyor.

Düzenle

Bekle, her şey doğru gözükmüyor. Geri arama işlevi tanımınıza bir parametre eklemek istediğinizi düşünmüyorum. Bunun yerine, $templategeri arama içinde tanımlamanız veya değiştirmeden geri göndermeniz gerekir. Yani, bunu değiştirin:

function my_template( $template = '' ){

...Bununla:

function my_template(){

Örneğin:

function my_template(){

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

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

Düzenle 2

Tamam, benim açımdan küçük bir hata. Bunu geri arama olarak deneyin:

function my_template( $path, $template ){

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

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

'belge' = 'belge' hatası için özür dilerim. Şimdi yeni fonksiyonunuzla, hala çalışmıyor. hatası, call_user_func_array parametresinin 1 parametresinin geçerli bir geri arama olmasını beklediğini, dizinin tam olarak iki üyesi olması gerektiğini söylüyor
Jenny

Benim hatam; Eğer do geri çağırma işlevi tanımına parametreler eklemeniz gerekir. Güncellenmiş cevaba bakınız.
Chip Bennett

Yeni kod da çalışmıyor. Print_r denedim, yolumun doğru olduğunu görebiliyorum.
Jenny
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.