Bagaimana cara menambahkan filter dengan 2 args?

9

Saya ingin mengubah $ path di filter berikut. Ini memiliki 1 input dan 2 argumen.

function documents_template( $template = '' ) {

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

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

Ini adalah fungsi saya untuk menambahkan filter, mendapat pesan kesalahan, bagaimana cara memperbaikinya?

function my_template( $template = '' ){

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

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

Saya mencoba mengubah nilai pengembalian sebagai berikut, tidak berfungsi:

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

Dengan jawaban di bawah ini, filter baru saya masih tidak berfungsi, jadi, mungkin itu karena filter saya ada di kelas? ini kode yang sama sekali baru:

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

Jawaban:

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 membutuhkan 4 variabel. Diperlukan yang pertama dan kedua. 1. nama filter, 2. nama fungsi. Yang ketiga adalah prioritas (kapan fungsi dipecat). Dan yang keempat adalah jumlah parameter. Jika Anda menentukan jumlah argumen, Anda juga harus meletakkannya di fungsi Anda. Sebagai contoh,

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

Jika filter mendukung lebih banyak argumen (dalam hal ini 3)

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

Baca semua codex untuk informasi tentang 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 );

Kode ini berfungsi untuk saya. Apakah kamu mencoba ini?


Di kelas Anda berubah:

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

untuk:

add_filter( 'document_template', array( $this, 'my_template'), 10, 2  );
Rob Vermeer
sumber
tambahkan lebih banyak input di fungsi my_template juga tidak berfungsi.
Jenny
Apakah Anda mendapatkan kesalahan?
Rob Vermeer
ya, semua kesalahan adalah sama: call_user_func_array mengharapkan parameter 1 menjadi panggilan balik yang valid, array harus memiliki tepat dua anggota
Jenny
Saya mengedit jawaban saya. Jika Anda menghapus kode Anda kesalahannya hilang, bukan?
Rob Vermeer
ya, saya mengganti kode saya dengan ini, masih tidak berfungsi.
Jenny
2

Ini harus cocok, tetapi jangan:

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

dan

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

document_template ! = documents_template

Kalau tidak, semuanya terlihat benar.

Edit

Tunggu, tidak semuanya terlihat benar. Saya tidak berpikir Anda ingin menambahkan parameter ke definisi fungsi panggilan balik Anda. Sebagai gantinya, Anda perlu mendefinisikan $templatedalam callback, atau hanya mengirimkannya kembali tanpa dimodifikasi. Jadi, ganti ini:

function my_template( $template = '' ){

...dengan ini:

function my_template(){

misalnya:

function my_template(){

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

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

Edit 2

Oke, kesalahan kecil di pihak saya. Coba ini sebagai panggilan balik Anda:

function my_template( $path, $template ){

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

     return $path;
}
add_filter( 'documents_template','my_template', 10, 2 );
Chip Bennett
sumber
maaf atas kesalahan 'dokumen' = 'dokumen'. Sekarang dengan fungsi baru Anda, itu masih tidak berfungsi. kesalahan mengatakan call_user_func_array mengharapkan parameter 1 menjadi panggilan balik yang valid, array harus memiliki tepat dua anggota
Jenny
Kesalahanku; Anda tidak perlu menambahkan parameter untuk definisi fungsi callback. Lihat jawaban yang diperbarui.
Chip Bennett
Kode baru juga tidak berfungsi. Saya mencoba print_r, bisa melihat jalur saya sudah benar.
Jenny