সমস্যাটি হ'ল আপনি কোনও বেনামি ফাংশন এবং অন্য রূপটি আলাদা করতে পারবেন না, সুতরাং হ্যাঁ, একটি বন্ধকরণ (অর্থাত্ বেনাম ফাংশন) মুছে ফেলা সম্ভব তবে একই ফিল্টারে যদি একাধিক বন্ধকরণ একই অগ্রাধিকারে কাজ করে তবে আপনাকে একটি পছন্দ করতে হবে , সেগুলি সরিয়ে ফেলুন, আকরিকটি কেবল একটিকে সরিয়ে ফেলুন (কোনটি ঠিক তা না জেনে)।
আপনার পোস্ট @ টসচো উত্তরের একটি থেকে উত্পন্ন ফাংশনটি ব্যবহার করে কীভাবে সেগুলি সরিয়ে ফেলতে হবে তা আমি দেখাব:
/**
* Remove an object filter.
*
* @param string $tag Hook name.
* @param string $class Class name. Use 'Closure' for anonymous functions.
* @param string|void $method Method name. Leave empty for anonymous functions.
* @param string|int|void $priority Priority
* @return void
*/
function remove_object_filter( $tag, $class, $method = NULL, $priority = NULL ) {
$filters = $GLOBALS['wp_filter'][ $tag ];
if ( empty ( $filters ) ) {
return;
}
foreach ( $filters as $p => $filter ) {
if ( ! is_null($priority) && ( (int) $priority !== (int) $p ) ) continue;
$remove = FALSE;
foreach ( $filter as $identifier => $function ) {
$function = $function['function'];
if (
is_array( $function )
&& (
is_a( $function[0], $class )
|| ( is_array( $function ) && $function[0] === $class )
)
) {
$remove = ( $method && ( $method === $function[1] ) );
} elseif ( $function instanceof Closure && $class === 'Closure' ) {
$remove = TRUE;
}
if ( $remove ) {
unset( $GLOBALS['wp_filter'][$tag][$p][$identifier] );
}
}
}
}
আমি ফাংশনটির নাম পরিবর্তন করেছি remove_object_filter
কারণ এটি সমস্ত ধরণের অবজেক্ট ফিল্টারগুলি সরিয়ে ফেলতে পারে: স্ট্যাটিক ক্লাস পদ্ধতি, গতিশীল অবজেক্ট পদ্ধতি এবং ক্লোজার।
$priority
যুক্তি ঐচ্ছিক, কিন্তু বন্ধ সরানোর এটা সবসময় ব্যবহার করা উচিত, অন্যথায় ফাংশন কোনো অবসান ফিল্টার যোগ করা, সেটা ব্যাপার যা অগ্রাধিকার এ, কারণ যখন সরাবে $priority
বাদ দেওয়া হয়, লক্ষ্য বর্গ / পদ্ধতি বা অবসান ব্যবহার সমস্ত ফিল্টার হয় সরানো হয়েছে।
ব্যবহারবিধি
// remove a static method
remove_object_filter( 'a_filter_hook', 'AClass', 'a_static_method', 10 );
// remove a dynamic method
remove_object_filter( 'a_filter_hook', 'AClass', 'a_dynamic_method', 10 );
// remove a closure
remove_object_filter( 'a_filter_hook', 'Closure', NULL, 10 );