我不明白ADD_ACTION和DO_ACTION如何同时工作。前者已经执行了代码...do_action的作用是什么?

时间:2019-05-14 作者:Dennisio

我试着阅读文档,但定义却让我摸不着头脑。我发现这个例子可以解决我的问题->https://stackoverflow.com/questions/50286549/how-can-i-store-the-values-from-a-wpform-in-wordpress-to-mysql-database

虽然我很高兴它能起作用,但我希望我能理解为什么。我只是非常幸运,这段代码为我的目的设计了一个方框

在我的功能中。php。我有add\\u操作和函数。该函数执行一些操作。当我发布我的表单时,它是有效的。为什么?

我没有在任何地方使用do\\u action,那么它的目的是什么?为什么add\\u action会自动工作,而我只是在自定义函数中添加一个挂钩?

同样在示例中,do\\u操作传递了更多参数。add\\u action函数只有一个,但我可以像访问数组一样轻松地访问它?老实说,我不知道发生了什么事。这感觉很神奇,任何反向工程的尝试都不能帮助我理解这一点。

有外行的解释吗?为了简单起见,下面是我链接的问题的第一个答案的代码。

官方插件文档中的do\\u操作

do_action( \'wpforms_process_complete\', $this->fields, $entry, $form_data, $entry_id );
添加自定义操作?

add_action("wpforms_process_complete", \'function_save_custom_form_data\');

function function_save_custom_form_data($params) {

    foreach($params as $idx=>$item) {
        $field_name = $item[\'name\'];
        $fiel_value = $item[\'value\'];
        // Do whatever you need
    }
    return true;

}

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

这个do_action() 函数执行已挂接的任何代码add_action(). 你function_save_custom_form_data() 函数运行是因为WP Forms插件添加了对do_action() 在其代码内。

那么使用什么do_action() 在一个主题或插件中,允许其他插件或主题在其进程中运行代码。在您的示例中,只要表单处理完成,WP Forms插件就会运行do_action( \'wpforms_process_complete\' ). 它本身不做任何事情,但它允许您使用add_action() 要在该点运行代码,请使用add_action().

同样在示例中,do\\u操作传递了更多参数。add\\u action函数只有一个,但我可以像访问数组一样轻松地访问它?

在回调函数中,您正在访问$this->fields$params (所以它不是一个合适的名称),它恰好是一个数组。您没有任何访问权限$entry, $form_data$entry_id. 要访问这些,需要将接受的参数数传递给add_action. 例如,这允许您访问所有4个参数:

add_action( \'wpforms_process_complete\', \'function_save_custom_form_data\', 10, 4 );
最后一个参数是“accepted args”值。通过将其设置为4,您可以让WordPress知道您的function_save_custom_form_data() 函数接受4个参数,现在可以这样使用:

function function_save_custom_form_data( $fields, $entry, $form_data, $entry_id ) {
在引擎盖下你要去的第二个区域add_action() 是一个callback, 和do_action() 只是执行回调。

相关推荐

WooCommerce在Orders列表的Bulk Actions下拉列表中添加一个新的Bulk Actions

我试图在WooCommerce订单列表中添加一个自定义批量操作,这将是我为单个订单编写的一段代码,但需要使其递归工作。我知道:Custom bulk_action 但它指的是wordpress批量操作菜单,而不是专门针对woocommerce的。你能帮我在我的woocommerce订单列表插件中运行它吗?此外,我还对如何在添加该操作后扫描要检查的订单并仅对所选订单应用批量操作感到有点困惑。