过滤器如何在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提示的 博客

From: https://hackernoon.com/how-do-filters-work-in-wordpress-xwr9d30qr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值