如何插入另一个插件中的过滤器

时间:2019-08-29 10:25:55

标签: wordpress

我是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

1 个答案:

答案 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');