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.