wordpress采集器
老实说,我已经为WordPress开发了一段时间(一年多了),但是过滤器和操作的想法对我来说仍然不清楚。 所以最近,我决定一劳永逸地解决这个问题。
在本文中,我将与您分享有关WordPress过滤器的发现。 希望它可以使您更清楚地了解此主题。
让我们开始吧。
为什么要使用add_filter和apply_filters
我将简短地说:
- 如果要修改现有数据,则可以使用add_filter添加一个函数来修改该数据
- 经过上述所有功能修改后,可以使用apply_filters运行使用add_filter添加的所有功能并返回数据
一个简单的例子
一段代码值得一千行文本,因此下面是一个简单的示例:
$my_name ='Luis' ;
add_filter( 'my_name' , 'uppercase_it' );
function uppercase_it ($name)
{
return strtoupper($name);
}
$new_name = apply_filters( 'my_name' , $my_name);
dump($new_name);
如您所料,$ new_name是“ LUIS”,这是我们在屏幕上看到的(我在这里使用var_dumper库)。
一些注意事项
从上面的示例可以看到,add_filter接受两个参数。 第一个是标签,第二个是函数。 如果您未在某处调用具有相同标签的apply_filters,则将功能添加到过滤器标签是没有用的。
当apply_filters在特定标签上运行时,它将调用添加到该标签的所有函数。
多个add_filter
您可以根据需要向标签添加尽可能多的功能。 让我们向my_name添加另一个函数
$my_name ='Luis' ;
add_filter( 'my_name' , 'uppercase_it' );
add_filter( 'my_name' , 'add_family_name' );
function uppercase_it ($name)
{
return strtoupper($name);
}
function add_family_name ($name)
{
return $name . ' Hernandez' ;
}
$new_name = apply_filters( 'my_name' , $my_name);
dump($new_name);
如您所见,我在标签my_name中添加了另一个功能。 此函数在名称后添加“ Hernandez”。 $ new_name现在将是:
如您所见,add_filter的顺序很重要。 如果我交换两个过滤器的顺序(将过滤器的“ uppercase_it”上面带有“ add_family_name”,则$ new_name将为:
多个apply_filters
与add_filter相似,您可以根据需要多次调用apply_filters。 让我们看下面的代码:
<?php
$my_name = 'Luis' ;
add_filter( 'my_name' , 'add_family_name' );
add_filter( 'my_name' , 'uppercase_it' );
function uppercase_it ($name)
{
return strtoupper($name);
}
function add_family_name ($name)
{
return $name . ' Hernandez' ;
}
$new_name = apply_filters( 'my_name' , $my_name);
$new_name2 = apply_filters( 'my_name' , $my_name);
dump($new_name);
dump($new_name2);
您可以猜测我得到两个相同的结果:
现在,放置apply_filters的位置很重要。 如果我将一个apply_filters放在第一个add_filter之后(但在第二个add_filter之前),而将另一个apply_filters放在所有下面,则两个结果是不同的:
$my_name ='Luis' ;
add_filter( 'my_name' , 'add_family_name' );
$name_1 = apply_filters( 'my_name' , $my_name);
add_filter( 'my_name' , 'uppercase_it' );
$name_2 = apply_filters( 'my_name' , $my_name);
dump($name_1);
dump($name_2);
但是,顺序取决于另一种称为优先级的事情,我们将在本文后面讨论。
挖掘apply_filters
现在,让我们看一下apply_filters内部。 它的功能很长,因此建议您在此处查看完整的源代码。
让我们看一下第一行:
global $wp_filter, $wp_current_filter;
$ wp_filter是一个数组,用于存储有关标签及其功能的所有数据。 让我们通过在下面添加以下代码来查看标签“ my_name”:
if ($tag == 'my_name' ) {
dump($wp_filter[$tag]);
}
结果如下:
如您所见,$ wp_filter ['my_name']是WP_Hook的一个实例。 让我们忽略所有其他详细信息,将重点放在callback属性上。
您会看到它是一个关联的数组,键(10)是priority 。 由于调用add_filter时没有指定优先级,因此默认值为10。WordPress使用优先级来确定函数的调用顺序。
如果我将优先级指定如下:
add_filter('my_name' , 'add_family_name' , 12 );
add_filter( 'my_name' , 'uppercase_it' , 13 );
然后,回调数组将具有两个键12和13:
结论
希望本文中的示例可以帮助您更多地了解WordPress中的过滤器。 如果您喜欢 这篇 文章,请不要忘记 在 这里写有关WordPress和WooCommerce提示的 博客 。
翻译自: https://hackernoon.com/how-do-filters-work-in-wordpress-xwr9d30qr
wordpress采集器