1. 首页
  2. WordPress 函数手册

do_action()

do_action( string $tag, mixed $arg )

执行挂接在特定动作挂钩上的函数。
Execute functions hooked on a specific action hook.

目录锚点:#说明#参数#返回#源码#笔记


说明(Description)

此函数调用附加到action hook$tag的所有函数。只需调用此函数,使用$tag参数指定新钩子的名称,就可以创建新的操作钩子。

您可以向钩子传递额外的参数,就像使用apply_filters()一样。

示例用法:

//操作回调函数。

函数示例u回调($arg1,$arg2){

//(也许)用args做点什么。

}

添加操作(“example_action”、“example_callback”,10,2);

/*

*通过调用“example_callback()”函数触发操作

*这和上面的“示例”有关。

*

*-“example_action”是动作挂钩。

*-$arg1和$arg2是传递给回调的附加参数。

$value=do_action(’example_action’,$arg1,$arg2);


参数(Parameters)

参数 类型 必填 说明
$tag (string) 必需 要执行的操作的名称。
$arg (mixed) 可选 传递给与操作挂钩的函数的其他参数。默认为空。

返回(Return)

无返回值


源码(Source)

/**
 * Execute functions hooked on a specific action hook.
 *
 * This function invokes all functions attached to action hook `$tag`. It is
 * possible to create new action hooks by simply calling this function,
 * specifying the name of the new hook using the `$tag` parameter.
 *
 * You can pass extra arguments to the hooks, much like you can with
 * {@see apply_filters()}.
 *
 * @since 1.2.0
 *
 * @global array $wp_filter         Stores all of the filters
 * @global array $wp_actions        Increments the amount of times action was triggered.
 * @global array $merged_filters    Merges the filter hooks using this function.
 * @global array $wp_current_filter Stores the list of current filters with the current one last
 *
 * @param string $tag The name of the action to be executed.
 * @param mixed  $arg Optional. Additional arguments which are passed on to the
 *                    functions hooked to the action. Default empty.
 */
function do_action($tag, $arg = '') {
	global $wp_filter, $wp_actions, $merged_filters, $wp_current_filter;

	if ( ! isset($wp_actions[$tag]) )
		$wp_actions[$tag] = 1;
	else
		++$wp_actions[$tag];

	// Do 'all' actions first
	if ( isset($wp_filter['all']) ) {
		$wp_current_filter[] = $tag;
		$all_args = func_get_args();
		_wp_call_all_hook($all_args);
	}

	if ( !isset($wp_filter[$tag]) ) {
		if ( isset($wp_filter['all']) )
			array_pop($wp_current_filter);
		return;
	}

	if ( !isset($wp_filter['all']) )
		$wp_current_filter[] = $tag;

	$args = array();
	if ( is_array($arg) && 1 == count($arg) && isset($arg[0]) && is_object($arg[0]) ) // array(&$this)
		$args[] =& $arg[0];
	else
		$args[] = $arg;
	for ( $a = 2, $num = func_num_args(); $a < $num;="" $a++="" )="" $args&#91;&#93;="func_get_arg($a);" sort="" if="" (="" !isset(="" $merged_filters&#91;="" $tag="" &#93;="" )="" )="" {="" ksort($wp_filter&#91;$tag&#93;);="" $merged_filters&#91;="" $tag="" &#93;="true;" }="" reset(="" $wp_filter&#91;="" $tag="" &#93;="" );="" do="" {="" foreach="" (="" (array)="" current($wp_filter&#91;$tag&#93;)="" as="" $the_="" )="" if="" (="" !is_null($the_&#91;'function'&#93;)="" )="" call_user_func_array($the_&#91;'function'&#93;,="" array_slice($args,="" 0,="" (int)="" $the_&#91;'accepted_args'&#93;));="" }="" while="" (="" next($wp_filter&#91;$tag&#93;)="" !="=" false="" );="" array_pop($wp_current_filter);="" }="">
更新版本 源码位置 使用 被使用
5.3.0 wp-includes/plugin.php:444 374 1 function

笔记(Notes)

例子
大问题:
相关:

do_action() 为WP2原创文章,链接:https://www.wp2.cn/functions/do_action/

发表评论

您的电子邮箱地址不会被公开。