Action是Hooks的两种类型之一。 它们提供了在执行WordPress Core,插件和主题的特定点运行功能的方法。 它们是Filter的对应物。 ##添加Action 添加Action的过程包括两个步骤。 首先,您需要创建一个回调函数,该函数在运行时将被调用。 其次,您需要将Callback函数添加到一个将执行该函数调用的钩子中。 您将使用add_action()函数,传递至少两个参数string $ tag,callable $ function_to_add。 下面的例子将在执行init钩子时运行: ``` <?php function wporg_custom() { // do something } add_action('init', 'wporg_custom'); ``` 您可以参考Hooks章节了解可用挂钩的列表。 当您获得更多的经验,通过WordPress核心源代码将允许您找到最合适的钩子。 ## 附加参数 add_action()可以接受两个附加参数,int $ priority用于给予回调函数的优先级,int $ accepted_args表示将传递给回调函数的参数数。 ## 优先 优先级决定了与给定钩子相关联的其他回调函数相关的回调函数何时执行。 优先级为11的功能将以优先级为10的功能运行; 并且优先级为9的函数将在优先级为10的函数之前运行。任何正整数是可接受的值,默认值为10。 如果两个回调函数以相同的优先级为同一个钩子注册,那么将按照它们挂钩的顺序运行。 例如,以下回调函数都注册到 init钩子,但具有不同的优先级: ``` <?php add_action('init', 'run_me_early', 9); add_action('init', 'run_me_normal'); // default value of 10 is used since a priority wasn't specified add_action('init', 'run_me_late', 11); ``` 运行的第一个函数是run_me_early(),其次是run_me_normal(),最后运行的函数将是run_me_late()。 ## 参数数量 有时候,回调函数需要接收一些与其挂接的函数相关的额外数据。 例如,当WordPress保存一个帖子并运行save_post钩子时,它会将两个参数传递给回调函数:保存的帖子的ID以及post对象本身: ``` do_action('save_post', $post->ID, $post); ``` 所以,当save_post钩子注册一个回调函数时,它可以指定它要接收这两个参数: ``` add_action('save_post', 'wporg_custom', 10, 2); ``` ...然后它可以在函数定义中注册参数: ``` function wporg_custom($post_id, $post) { // do something } ``` ## 示例 如果您想修改在前端的循环中获取搜索结果的查询,则可以钩入pre_get_posts钩子。 ``` <?php function wporg_search($query) { if (!is_admin() && $query->is_main_query() && $query->is_search) { $query->set('post_type', ['post', 'movie']); } } add_action('pre_get_posts', 'wporg_search'); ```