描述
动作是WordPress核心在执行期间或特定事件发生时在特定点启动的挂钩。插件可以使用动作API指定在这些点执行其一个或多个PHP函数。
参数
- $hook_name
-
(string) (必填) 要向其添加回调的动作名称。
- $callback
-
(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 }
源码
更新日志
版本 | 描述 |
---|---|
1.2.0 | 开始引入 |
使用示例
与类一起使用,要使用
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' ) ); } /** * Handle saving post data. */ public function wpdocs_save_posts() { // do stuff here... } } $wpdocsclass = new WP_Docs_Class();
与类中的静态函数一起使用
如果静态调用该类,则该方法必须如下所示,因为$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' ) ); } /** * Handler for saving post data. */ public static function wpdocs_save_posts() { // do stuff here... } } WP_Docs_Static_Class::init();
只要你的博客上有发布文章,就可以用简单的钩子给朋友发邮件:
/** * 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' );
要将变量传递给动作的被调用函数,当参数在原始编码的do_action中不可用时,可以使用闭包(自PHP 5.3+)。例如:
add_action('wp_footer', function($arguments) use ($myvar) { echo $myvar; }, $priority_integer, $accepted_arguments_integer);
在类中使用时传递参数
要在使用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; }
如何添加从实例化类调用函数(带有参数)的动作:
$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' ); } );
接受的参数
钩住的函数可以选择性地接受动作调用中的参数(如果设置了要传递的参数)。在这个简单的示例中,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 );