有报道称remove_filter
does not work under some circumstances, and that we should provide alternatives. 然而,这篇文章并没有真正明确说明在什么情况下会发生这种情况。
我正在寻找将中断的代码示例remove_filter
, 提供了WordPress和PHP版本,以及最终提供的其他相关信息。我认为以下代码片段应该是一个有用的模板:
<?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\'));
这将返回预期的:
string(14) "Original value"
string(8) "Filtered"
string(14) "Original value"
我相信在某些情况下会出现错误,其中过滤器是类的一部分,或者使用了多个过滤器。我理解
_wp_filter_build_unique_id
is involved. 请指出该代码中错误的来源。
SO网友:hakre
这是一个与Wordpress开发问题相关的非常具体的主题。如果您喜欢我的文章,我强烈建议您跟踪trac记录。我想这是你能做的最好的事情,可以找出问题何时出现,以及如何从技术上规避它们(如果你不喜欢,就不要使用remove_filter()
-回答)。
从理论的角度来看:只是没有严格处理所使用的数据类型,以确保在所有可能的值上都具有相同的功能(f(n)!=f(n))。简而言之:一个破碎的设计。
这是否意味着在练习中总是会中断?-不只是有时候会发生。然后当你需要依靠remove_filter()
.
一个更好的建议可能是这样的:如果您开发的插件使用挂钩作为类方法,请确保该插件在安装PHP 5.2/5.3时执行。
请将技术讨论记录在trac记录单中。如果您非常感兴趣,请帮助修复当前设计的缺点。
SO网友:t31os
正如丹尼斯在哈克雷的博客上评论的那样,这是一个非常基本的例子。
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 \'\';
但是,在运行该代码之前,请扪心自问,您希望得到什么样的结果。一旦你决定了结果应该是什么,运行它,看看会发生什么。