我是Wordpress的新手,所以这个问题似乎很愚蠢。我很难理解自定义过滤器的实际工作原理。
所以我的理解是,您先使用add_filter('filter_tag' ,'callback')
添加一个过滤器,然后再使用apply_filter('filter_tag' , $var)
使用回调函数来更改$ var的值。因此,如下所示的代码将无法挂接到过滤器中:
function callback($var){
return ($var.'append');
}
$var = 'testing';
echo $var;
$var1 = apply_filters('custom_filter', $var);
add_filter('custom_filter' , 'callback');
echo $var1;
相反,它必须是:
add_filter('custom_filter' , 'callback');
$var1 = apply_filters('custom_filter', $var);
现在我的问题是,是否要挂接到另一个插件(例如,名为A)的自定义过滤器中,如何在A中的add_filter('custom_filter' , 'callback');
之前执行我的插件B中的apply_filters('custom_filter', $var);
? / p>
我尝试创建两个名为A和B的插件进行了测试(在读到某个插件按字母顺序执行之后)。
因此a.php如下所示:
function callback($var){
return ($var.'append');
}
add_filter('custom_filter' , 'callback');
和b.php如下:
$var = 'testing';
echo $var;
$var1 = apply_filters('custom_filter', $var);
echo $var1;
该过滤器似乎正在工作,因为我正在获得所需的输出testtestingappend。但是,如果我在a.php中有apply_filters(),而在b.php中有add_filter(),则该过滤器似乎无法正常工作,因为我看到了testingtesting的输出。我认为这是因为插件按字母顺序执行。如果是这种情况,那么插入退出插件过滤器的正确方法是什么?更改插件名称似乎并不合理。
我正在编辑并添加有关所面临问题的视频:
https://drive.google.com/open?id=1GlGzxrBc0DTCR_fpHINiB_yqW7xVIC0L
答案 0 :(得分:0)
如果有人感兴趣,那么我问题的关键是如果您在'init'之前使用它们,apply_filters的结果是不可预测的,因为不能保证该钩子已经注册。
//This is the filter hook
function filter_function(){
$var = 'testing';
echo $var;
$var1 = apply_filters('custom_filter', $var);
echo $var1;
}
add_action('init' ,'filter_function');