do_action和add_action之间的区别


20

这个问题可能是错误的,我不确定。因为我对此不清楚。

我知道add_action它用于将我们的功能挂钩到指定的功能。例如,add_action('wp_head'.'myfunc');现在myfunc将在其中执行任何代码wp_head()。这很明显,但是我对此有疑问do_action?

我认为它是用来创建我们自己的钩子,就像已经可用的钩子(wp_head,wp_footer,.. etc)。

我已经尝试过互联网的区别,但是所有人都指出了add_action和add_filter之间的区别。我不想去那里,因为首先我想弄清这一点,然后我将搬到那里。

有谁能够帮助我?

问题发布后编辑

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');

add_action('custom','custom_register');

我在插件中尝试了此操作,但没有收到警报消息。

但是当我与相同的功能挂钩时,wp_head它工作正常

/******************working****************/
add_action('wp_head','custom_register');

注册回调do_action('custom'); 后呼叫时会发生什么?并确保已加载jQuery。
— fuxia

我没有得到警报消息无论是在后端或前端
— 太阳

jQuery已加载。当我钩上相同的功能时,wp_head它工作正常,但不能正常工作custom
— 2013年

Sun,我相信您最初的问题已由toscho回答,您应将此问题标记为已解决。您完成的#3和#4编辑属于一个新Question。
— brasofilo

Answers:


13

使用do_action( 'unique_name' )来创建自己的操作。

您可以使用它为您的插件提供API,以便其他插件可以为您的自定义操作注册回调。示例:我需要在插件中调用do_action吗?

但是您也可以在主题中使用自定义操作(或过滤器)。示例:将自定义部分实现为WordPress主题的最佳实践方法

您可以将两者结合在一起以使插件和主题协同工作。示例:如何使主题中的插件提供方法?

摘要:add_action( 'foo' )注册一个回调,do_action( 'foo' )执行该注册的回调。


感谢您提供的帮助,这主要是为了API。我尝试了一个样本,但没有成功,您可以在那找到任何问题吗?检查我的编辑@toscho
— 太阳

我们可以说这是继承的另一种情况吗?在扩展和覆盖类方面,我们正以这种方式进行。它是否正确?
— 太阳

@sun Hm,是的,但是您可以将两种方法结合使用,但它们并不互相排斥。
— fuxia

1

这是我的猜测,因此,如果您知道的更多,请发表评论,以便我更新我的猜测。

您的插件代码在执行之前wp_head()(我们可以假定将调用添加到其中的操作)。当您使用时add_action('wp_head','custom_register'),您告诉PHP何时(将来)do_action('wp_head')被调用,也要调用custom_register()。您对的调用也是如此,add_action('custom','custom_register')但是正如您在代码中看到的那样,对的调用do_action('custom')已经完成,并且在调用时尚未(尚未)添加任何操作。这就是为什么Toscho询问注册回调do_action('custom') 后调用时会发生什么情况。您关于后端和前端的答案是模棱两可的。如果您在以下代码中交换最后两行,我认为它将起作用:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');                    // This is called before it will have an effect.

add_action('custom','custom_register'); // Too late - do_action was already called.

0

do_action:注册一个动作挂钩,而 add_action:向已注册的挂钩添加回调函数。

例

考虑您想在模板的侧边栏之前打印一些内容。

  1. 您将通过来在模板文件中添加一个动作挂钩。index.php<?php add_action('bp_sidebar_left'); ?>
  2. 现在,您functions.php可以在文件中向该挂钩添加回调函数以打印所需的内容。

add_action('bp_sidebar_left', 'bp_sidebar_left_cb'); function bp_sidebar_left_cb() { echo 'Hello World !'; }


-1

您必须像下面这样使用:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
.

add_action('custom','custom_register'); // Too late - do_action was already called. 
do_action('custom');                    // This is called before it will have an effect

它为我工作
— user112289'2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.