WordPress开发函数add_action()详细介绍
WordPress开发函数add_action(),将函数挂接到特定的操作上。
用法:
add_action( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 )
描述:
操作是wordpress核心在执行过程中的特定点或特定事件发生时启动的钩子。插件可以使用Action API指定在这些点上执行一个或多个PHP函数。
参数:
$tag
(string) (必需) $function_to_add被钩住的动作的名称。
$function_to_add
(callable) (必需) 您希望被调用的函数的名称。
$priority
(int) (可选) 用于指定与特定操作相关联的函数的执行顺序。较低的数字对应较早的执行,具有相同优先级的函数按照它们添加到动作中的顺序执行。
默认值:10
$accepted_args
(int) (可选) 函数接受的参数个数。
默认值:1
返回:
(true)将总是返回true。
更多的信息:
使用:
add_action( $hook, $function_to_add, $priority, $accepted_args );
要查找操作的参数数量和名称,只需搜索匹配do_action()调用的代码基。例如,如果你连接到' save_post ',你会发现它在post.php:
do_action( 'save_post', $post_ID, $post, $update );
你的add_action调用应该像这样:
add_action( 'save_post', 'wpdocs_my_save_post', 10, 3 );
你的函数是:
function wpdocs_my_save_post( $post_ID, $post, $update ) {
// do stuff here
}
来源:
文件:wp-includes/plugin.php
function add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {
return add_filter( $tag, $function_to_add, $priority, $accepted_args );
}
用户贡献的笔记:
(由Codex - 6年前贡献)
与类一起使用
要使用add_action()当你的插件或主题是使用类构建时,你需要使用数组可调用语法。你可以将函数作为数组传递给add_action(), $this作为第一个元素,然后是类方法的名称,如下所示:
/**
* Class WP_Docs_Class.
*/
class WP_Docs_Class {
/**
* Constructor
*/
public function __construct() {
add_action( 'save_post', array( $this, 'wpdocs_save_posts' ) );
}
(由Codex - 6年前贡献)
使用类中的静态函数
如果该类是静态调用的,方法必须如下所示,因为$this不可用。如果类被扩展,这也可以工作。使用以下:
/**
* Class WP_Docs_Static_Class.
*/
class WP_Docs_Static_Class {
/**
* Initializer for setting up action handler
*/
public static function init() {
add_action( 'save_post', array( get_called_class(), 'wpdocs_save_posts' ) );
}
(由Codex - 6年前贡献)
简单的钩
每当博客上有文章发表时,就给朋友发邮件:
/**
* Send email to my friends.
*
* @param int $post_id Post ID.
* @return int Post ID.
*/
function wpdocs_email_friends( $post_id ) {
$friends = 'bob@example.org, susie@example.org';
wp_mail( $friends, "sally's blog updated", 'I just put something on my blog: http://blog.example.com' );
return $post_id;
}
add_action( 'publish_post', 'wpdocs_email_friends' );
(安东尼·霍廷4年前贡献)
相关:
do_action()
remove_action()
(由mkormendy - 1年前贡献)
要将变量传递给被调用的action函数,可以在初始编码的do_action中参数不可用时使用闭包(从PHP 5.3+开始)。例如:
add_action('wp_footer', function($arguments) use ($myvar) {
echo $myvar;
}, $priority_integer, $accepted_arguments_integer);
(由lucasbustamante贡献- 3年前)
在类中使用时传递参数
在类中通过add_action调用方法时,要将参数传递给方法,你可以这样做:
public function __construct() {
// Actions
add_action('init', array($this, 'call_somefunction'));
}
/**
* Intermediate function to call add_action with parameters
*/
public function call_somefunction() {
$this->somefunction('Hello World');
}
/**
* Actual function that does something
*/
public function somefunction($text) {
echo $text;
}
(由Christian Saborio贡献- 10个月前)
如何添加一个动作来调用一个实例化类的函数(带参数):
$admin_menu_hider = new AdminMenuHider( UserManagement::get_internal_users() );
add_action(
'wp_before_admin_bar_render',
function () use ( $admin_menu_hider ) {
$admin_menu_hider->change_greeting_message( 'Hello' );
}
);
(由Codex - 6年前贡献)
接受参数
如果设置了要传递的参数,钩子函数可以选择性地接受来自动作调用的参数。在这个简单的示例中,echo_comment_id函数接受$comment_id参数,该参数在使用comment_id_not_found过滤器钩子运行do_action()调用时自动传递给它。
/**
* Warn about comment not found
*
* @param int $comment_id Comment ID.
*/
function echo_comment_id( $comment_id ) {
printf( 'Comment ID %s could not be found', esc_html( $comment_id ) );
}
add_action( 'comment_id_not_found', 'echo_comment_id', 10, 1 );