Saya harus mengatakan itu adalah praktik buruk yang menakutkan. Menghabiskan dua jam terakhir menemukan solusi untuk menghapus tindakan dan filter yang ditambahkan melalui fungsi Anonim.
Ini adalah kode yang digunakan pada Tema Induk, dan saya harus menghapusnya.
/**
* Add custom columns to admin comments grid
* * Rate that user set.
*/
add_filter( 'manage_edit-comments_columns', function( $default ) {
$columns['smr_comment_rate'] = __( 'Rate', 'txtdmn' );
return array_slice( $default, 0, 3, true ) + $columns + array_slice( $default, 2, NULL, true );
});
Mendapat jawaban toscho , bermain dengan itu, tetapi tidak membantu. Jadi, apakah ada alternatif lain yang akan menghapus tindakan / filter yang ditambahkan melalui fungsi anonim?
Terima kasih
Jawaban:
Masalahnya adalah Anda tidak dapat membedakan bentuk fungsi anonim dan lainnya, jadi ya, dimungkinkan untuk menghapus penutupan (yaitu fungsi anonim) tetapi jika lebih dari satu penutupan bertindak pada filter yang sama pada prioritas yang sama Anda harus membuat pilihan , hapus semuanya, jangan hanya menghapus satu (tanpa mengetahui persisnya).
Saya akan menunjukkan cara menghapus semuanya menggunakan fungsi yang sangat berasal dari yang ada di @toscho jawaban yang Anda poskan:
Saya telah mengganti nama fungsinya
remove_object_filter
karena dapat menghapus semua jenis filter objek: metode kelas statis, metode objek dinamis, dan penutup.The
$priority
argumen adalah opsional, tetapi ketika menghapus penutupan itu harus selalu digunakan, jika tidak fungsi akan menghapus setiap penutupan ditambahkan ke filter, tidak peduli di mana prioritas, karena ketika$priority
dihilangkan, semua filter menggunakan kelas target / metode atau penutupan yang dihapus.Cara Penggunaan
sumber
Bagaimana jika Anda menambahkan filter Anda, dengan prioritas 11, begitu seterusnya? Itu jelek, tetapi mungkin berhasil dalam kasus Anda.
sumber
Filter dan tindakan anonim dapat dihapus secara native menggunakan yang berikut:
Saat membuat id unik menggunakan
spl_object_hash()
, fungsi anonim dapat dibandingkan satu sama lain, sehingga objek penutupan penuh tidak perlu dibuat ulang lagi.Jika beberapa filter atau tindakan terhubung ke tag yang sama dengan prioritas yang sama, maka itu akan menghapus filter atau tindakan terbaru yang ditambahkan. Jika ada satu yang perlu Anda pertahankan, Anda harus menghapus semua filter hingga yang Anda perlu hapus, kemudian tambahkan lagi yang lain seperlunya.
Ini umumnya akan kembali ke praktik terbaik. Saya hanya akan menggunakan fungsi anonim sebagai bagian dari tema khusus yang saya kembangkan untuk klien, di mana saya tidak ingin filter ditimpa atau dihapus. Dalam setiap tema atau plugin publik yang saya kembangkan, saya akan menggunakan pabrik untuk menginisialisasi kelas, menambahkan semua filter dan tindakan saya, lalu menyimpan instance tersebut sebagai variabel statis.
sumber