it-swarm-id.com

Kapan remove_filter tidak berfungsi?

Ada laporan yang remove_filter tidak berfungsi dalam beberapa keadaan, dan bahwa kami harus memberikan alternatif . Namun, artikel itu tidak benar-benar memperjelas dalam keadaan apa hal ini terjadi.

Saya mencari contoh kode yang akan memecah remove_filter, dengan WordPress dan versi PHP, dan akhirnya info relevan lainnya disediakan. Saya pikir cuplikan berikut ini harus menjadi templat yang dapat digunakan:

<?php
include('wp-load.php');

function filtertest_function($value)
{
    return 'Filtered';
}

var_dump(apply_filters('filtertest', 'Original value'));
add_filter('filtertest', 'filtertest_function');
var_dump(apply_filters('filtertest', 'Original value'));
remove_filter('filtertest', 'filtertest_function');
var_dump(apply_filters('filtertest', 'Original value'));

Ini akan mengembalikan yang diharapkan:

string(14) "Original value"
string(8) "Filtered"
string(14) "Original value"

Saya percaya kesalahan muncul dalam beberapa kasus di mana filter merupakan bagian dari kelas, atau beberapa filter digunakan. Saya mengerti _wp_filter_build_unique_idterlibat . Harap tunjukkan di mana dalam kode itu sumber kesalahan tersebut.

3
Jan Fabry

Yah ini entah bagaimana topik yang sangat spesifik yang terkait dengan masalah pengembangan Wordpress. Saya sangat menyarankan Anda untuk melacak tiket trac jika Anda menyukai artikel saya. Itu adalah hal terbaik yang dapat Anda lakukan. Saya berasumsi untuk mencari tahu kapan masalah muncul dan juga bagaimana cara mengelak secara teknis (jika Anda tidak menyukai jangan gunakan remove_filter() - jawab).

Ambillah dari sudut pandang teoretis: Hanya saja tipe data yang digunakan tidak sepenuhnya ditangani untuk memastikan fungsionalitas yang sama pada semua nilai yang mungkin (f (n)! = F (n)). Singkatnya: desain yang rusak.

Apakah ini berarti akan selalu pecah dalam praktik? - Tidak! Hanya saja itu bisa terjadi kadang-kadang. Dan kemudian Anda terjebak ketika Anda harus mengandalkan remove_filter().

Saran yang lebih baik mungkin adalah ini: Jika Anda mengembangkan plugin yang menggunakan hook sebagai metode kelas, pastikan plugin dieksekusi pada instalasi dengan PHP 5.2/5.3.

Harap simpan diskusi teknis di tiket trac. Dan jika Anda benar-benar tertarik, tolong bantu untuk memperbaiki kekurangan dari desain saat ini.

3
hakre

Seperti yang dikomentari Denis di blog Hakre, ini adalah contoh yang sangat mendasar dari masalah ini.

function run_me_once() {
    remove_action( 'foobar', 'run_me_once' );
    echo 'test....';
}
add_action( 'foobar', 'run_me_once' );

function run_me2() {
    echo 'test2....';
}
add_action( 'foobar', 'run_me2', 11 );

echo '';
do_action( 'foobar' ); // test....
echo '';
echo '';
do_action( 'foobar' ); // test2....
echo '';

Sebelum menjalankan kode itu, tanyakan pada diri Anda, apa yang Anda harapkan dari hasilnya. Setelah Anda memutuskan apa hasilnya, jalankan dan lihat apa yang terjadi.

1
t31os