【发布时间】:2020-01-02 14:39:23
【问题描述】:
我是 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)的自定义过滤器,我的插件 B 中的 add_filter('custom_filter' , 'callback'); 将如何在 A 中的 apply_filters('custom_filter', $var); 之前执行?
我尝试创建两个名为 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;
过滤器似乎正在工作,因为我正在获得所需的 testingtestingappend 输出。但是,如果我在 a.php 中有 apply_filters(),在 b.php 中有 add_filter(),则过滤器似乎不起作用,因为我看到了 testingtesting 的输出。我假设这是因为插件按字母顺序执行。如果是这种情况,那么挂钩退出插件过滤器的正确方法是什么?更改插件名称似乎不合理。
我正在编辑并添加我所面临问题的视频:
https://drive.google.com/open?id=1GlGzxrBc0DTCR_fpHINiB_yqW7xVIC0L
【问题讨论】:
-
您是否已经有一个实际的插件,您称之为“插件 A”?如果你能说出它的名字,我可以查看他们的具体代码,并提出具体的建议。否则,我提供的任何答案都可能需要我们之间进行大量评论交流才能找到您需要的答案。
-
我在本地主机 A 和 B 中创建了两个测试插件并试了一下。这不是一个实际的插件。
-
抱歉之前的含糊评论。因此,问题与插件名称的 d 字母顺序(就像我之前想的那样)无关,因为我能够使用插件中实际插件的过滤器挂钩,同时故意命名我的插件 z 。但是,我的另一个问题仍然存在。我创建了两个测试插件 b 和 c 。 b 有钩子, c 有 add_filter() 。钩子不起作用,但是如果我以另一种方式使 c 具有 add_filter() 和 b 钩子,则过滤器开始工作。说得通 ?知道是什么原因造成的吗?我的插件没有做任何事情,只是回显上面的内容
-
我已将问题作为视频添加到原始问题的链接中。谢谢
标签: wordpress