当前浏览:首页 / WordPress函数 / add_action()

add_action( string $hook_name, callable $callback, int $priority = 10, int $accepted_args = 1 )

添加回调函数到动作钩子

action

addmore...


描述

动作是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开始引入

使用示例

  • 示例1

    与类一起使用,要使用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();
    
  • 示例2

    与类中的静态函数一起使用
    如果静态调用该类,则该方法必须如下所示,因为$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();
    
  • 示例3

    只要你的博客上有发布文章,就可以用简单的钩子给朋友发邮件:

    /**
     * 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中不可用时,可以使用闭包(自PHP 5.3+)。例如:

    add_action('wp_footer', function($arguments) use ($myvar) { 
        echo $myvar;
    }, $priority_integer, $accepted_arguments_integer);
    
  • 示例5
  • 示例6

    在类中使用时传递参数
    要在使用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;
    }
  • 示例7

    如何添加从实例化类调用函数(带有参数)的动作:

    $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' );
        }
    );
    
  • 示例8

    接受的参数
    钩住的函数可以选择性地接受动作调用中的参数(如果设置了要传递的参数)。在这个简单的示例中,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 );