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库)。




wordpress获取文章的第一张图片_java


一些注意事项

从上面的示例可以看到,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现在将是:


wordpress获取文章的第一张图片_vue_02


如您所见,add_filter的顺序很重要。 如果我交换两个过滤器的顺序(将过滤器的“ uppercase_it”上面带有“ add_family_name”,则$ new_name将为:


wordpress获取文章的第一张图片_java_03


多个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);


您可以猜测我得到两个相同的结果:


wordpress获取文章的第一张图片_wordpress获取文章的第一张图片_04


现在,放置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);


wordpress获取文章的第一张图片_wordpress获取文章的第一张图片_05


但是,顺序取决于另一种称为优先级的事情,我们将在本文后面讨论。

挖掘apply_filters

现在,让我们看一下apply_filters内部。 它的功能很长,因此建议您在此处查看完整的源代码。

让我们看一下第一行:


global $wp_filter, $wp_current_filter;


$ wp_filter是一个数组,用于存储有关标签及其功能的所有数据。 让我们通过在下面添加以下代码来查看标签“ my_name”:


if ($tag == 'my_name' )	{
    dump($wp_filter[$tag]);
}


结果如下:


wordpress获取文章的第一张图片_python_06


如您所见,$ 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获取文章的第一张图片_07


结论

希望本文中的示例可以帮助您更多地了解WordPress中的过滤器。 如果您喜欢 这篇 文章,请不要忘记 在 这里写有关WordPress和WooCommerce提示的 博客 。

翻译自: https://hackernoon.com/how-do-filters-work-in-wordpress-xwr9d30qr

wordpress采集器