Wordpress函数add_action()

Wordpress常用函数 add_action() 在主题、插件制作中很常用,它主要作用就是将自定义的函数连接到指定action(动作),wodpress会调用 do_action() 触发自定义动作。

wordpress 具体有哪些action hook,可在官网查看动作hook列表:http://codex.wordpress.org/Plugin_API/Action_Reference

用法

add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1);

参数详解

$tag:(字符串)希望连接到的wordpress动作名称
默认值:None

$function_to_add:(回调)希望调用的自定义函数名称。注意: the PHP documentation for the 'callback' type中解释的语法均可用。
默认值:None

$priority:函数的重要程度。改变此参数以决定函数与其他函数的调用顺序。默认值为10,因此(例如)将值设为5时函数运行较早,设为12时运行则较晚。
默认值:10

$accepted_args:函数所接受参数的数量。在WordPress 1.5.1及之后版本中,连接的函数可吸收其它在调用do_action() 或 apply_filters()时设置的参数。例如,comment_id_not_found动作将传递任何函数,若该函数将所请求的评论编号连接到该 动作。
默认值:1

返回值

(布尔)总是True。

简单的挂钩

以发布新内容时为例(挂钩为 publish_post,用电子邮件通知朋友:

function email_friends( $post_ID ){
	$friends = 'friendA@example.org, friendB@example.org';
	wp_mail( $friends, "Yangjunwei.com updated", 'I just put something on my blog: https://Yangjunwei.com' );
	return $post_ID;
}
add_action( 'publish_post', 'email_friends' );

接受的参数

挂钩函数可以选择接受从动作调用的参数,如果有任何要传递的话。在这个简单的例子中,echo_comment_id 函数需要 $comment_id 参数,该参数将在 comment_id_not_found 过滤钩子运行时通过 do_action() 传递。

function echo_comment_id( $comment_id ){
	echo 'Comment ID ' . $comment_id . ' could not be found';
}
add_action( 'comment_id_not_found', 'echo_comment_id', 10, 1 );

注释

要找出一个动作的参数的ID和名称,只需搜索匹配 do_action() 调用的代码库。举例来说,如果你挂载到'save_post',你会在 post.php 找到:

<?php do_action( 'save_post', $post_ID, $post ); ?>

你的 add_action 调用将是这样:

<?php add_action( 'save_post', 'my_save_post', 10, 2 ); //传递2个参数 ?>

而且你的函数将是这样:

function my_save_post( $post_ID, $post ){
	// do stuff here
}

在一个类中使用 add_action

当你的插件或主题使用类来创建时,使用 add_action 钩子,在类中添加 $this 和 函数名称 到你的 add_action 回调,像这样:

class MyPluginClass {
	public function __construct(){
		//add your actions to the constructor!
		add_action( 'save_post', array( $this, 'myplugin_save_posts' ) );
	}
 
	public function myplugin_save_posts(){
		//do stuff here...
	}
}

源文件

add_action() 位于 wp-includes/plugin.php

原文:http://codex.wordpress.org/Function_Reference/add_action