深入探索WordPress插件开发中的所有“钩子”函数技巧

二次开发的钩子大全

深入探索WordPress插件开发中的所有“钩子”函数技巧

这里给大家整理了一份二次开发中用到的所有钩子汇总。

muplugins_loaded:这个钩子是在必备插件加载完成后触发的。

registered_taxonomy:主要用于分类和标签,例如类别和 post_tag。

registered_post_type:专门用来处理帖子和页面的。

plugins_loaded:这个钩子在所有激活的插件和可插拔功能加载完成后执行。

sanitize_comment_cookies:当评论的 cookie 被清理时触发。

setup_theme:主题加载之前的一个重要步骤。

load_textdomain:与默认域有关。

after_setup_theme:通常用于初始化主题的设置和选项。这是在主题的 functions.php 文件加载后,首次触发的动作。这里调用 add_theme_support() 是非常重要的,因为 init 钩子可能来不及添加某些功能。此时,当前用户还未认证。

auth_cookie_malformed:处理无效的认证 cookie。

auth_cookie_valid:用来验证认证 cookie 是否有效。

set_current_user:在这里,当前用户已经通过身份验证,通常由插件用来初始化。

widgets_init:用于注册边栏,这个钩子在 init 优先级为1时触发,因此会在优先级大于等于1的 init 动作之前执行。

register_sidebar:每个侧边栏和页脚区域的注册。

wp_register_sidebar_widget:用于每个小部件的注册。

wp_default_scripts:这是一个参考数组。

wp_default_styles:同样是一个参考数组。

admin_bar_init:初始化管理栏。

add_admin_bar_menus:添加管理栏菜单。

wp_loaded:当 WordPress 完全加载完毕后触发。

parse_request:用于处理 HTTP 请求的操作。

send_headers:允许自定义 HTTP 头部。

parse_query:在设置查询变量后运行。

pre_get_posts:在执行查询之前,允许你修改查询变量对象。

posts_selection:这个钩子通常由缓存插件使用。

wp:在设置 WP 对象后触发。

template_redirect:在确定加载哪个模板之前调用。

get_header:在加载头部模板文件之前触发。

wp_enqueue_scripts:这个钩子在排队脚本和样式时执行。

enqueue_color_scheme:特定于某个主题,通常是二十一主题。

wp_head:用于在网页的头部标签中打印脚本或数据。

wp_print_styles:在打印样式之前执行。

wp_print_scripts:在打印脚本之前执行。

get_search_form:用于获取搜索表单。

loop_start:这个钩子在循环开始时触发。

the_post:允许在查询后立即修改 post 对象。

get_template_part_content:用于获取内容模板部分。

loop_end:这个钩子在循环结束时触发。

get_sidebar:在加载侧边栏模板文件之前。

dynamic_sidebar:在调用小部件的显示回调之前执行。

pre_get_comments:在获取评论之前执行。

wp_meta:在边栏显示回显内容之前触发。

get_footer:在加载页脚模板文件之前执行。

wp_footer:在确定要加载哪个模板之前执行。

wp_print_footer_scripts:在打印页脚脚本时执行。

admin_bar_menu:管理栏菜单的操作。

wp_before_admin_bar_render:在管理栏渲染之前执行。

wp_after_admin_bar_render:在管理栏渲染之后执行。

shutdown:在 PHP 执行即将结束之前触发。

这些操作都是在管理页面请求期间运行的。比如,当你登录用户打开版本 3.3.1 中的“帖子”页面时,这些操作会被触发。这份清单仅展示首次调用的动作,很多时候并没有函数挂钩到这些动作上。每个管理页面都有各自不同的操作列表,具体取决于页面的目的和已安装的插件。所以这份列表可以当作参考,但不必太过于拘泥。

在这些操作中,挂钩名称是依据页面而定的。比如“帖子”页面的挂钩是 edit.php,而主题的“背景”页面的挂钩是 presenting_page_custom-background。

动作是通过 do_action() 函数来调用的,不过标记为引用数组的动作则是通过 do_action_ref_array() 函数调用的。

管理员菜单与后台操作的全貌

谈到管理员菜单,你可能会想到一些关键的功能,比如 user_admin_menu 和 network_admin_menu。其实,这些都是后台管理的重要组成部分。

接着是 admin_init,这个函数在初始化时会被调用,准备好一切后续操作。current_screen 则可以帮助你了解当前的操作界面,方便后续调整。

在加载页面时,send_headers 允许你加入自定义的 HTTP 标头,挺实用的吧?而 pre_get_posts 则是在查询执行之前,让你可以访问到查询变量对象(参考数组),这对优化查询很有帮助。

接下来的 posts_selection 是与帖子选择相关的,而 wp 则是在设置 WP 对象后调用(引用数组)。这部分内容在 admin_xml_ns 中也有体现。

管理员脚本的引入通过 admin_enqueue_scripts 来处理,确保你需要的样式和脚本都能顺利加载。其中 admin_print_styles 会输出管理界面的样式,而 admin_print_scripts 则负责脚本的输出。

再说说 admin_head 和 admin_footer,这些都是在页面头部和底部注入内容的好机会,通常在 in_admin_header 和 in_admin_footer 的钩子中执行。

你可能还听说过 admin_notices 和 all_admin_notices,这两个钩子主要用来显示各种管理提示信息,帮助你及时了解系统状态。

在帖子和页面的管理中,像 post_submitbox_misc_actions 这样的钩子可以在编辑页面生成时,允许你在提交框中添加自定义字段,非常灵活。

当你添加附件时,attach_first_add_to_database 钩子会被触发,传入的参数是附件的 ID,确保你能够处理相关逻辑。

再说到类别的管理,add_category 和 create_category 其实是同一个功能,用于创建新类别。而 category_add_form_fields 和 category_edit_form 则是在添加和编辑类别时,帮助你在表单中加入额外字段。

清理缓存时,clean_post_cache 会运行,参数是帖子 ID,帮助你保持数据的新鲜度。而 delete_attachment 和 delete_category 则分别在删除附件和类别时触发,确保你能正确处理相关数据。

在帖子被垃圾回收时,wp_trash_post 会被调用,传入的是帖子 ID。反之,当帖子被恢复时,untrashed_post 则会运行,确保恢复流程顺畅。

在编辑和更新操作中,像 edit_post 和 post_updated 这样的钩子会在你更新内容时触发,确保你拥有最新的数据状态。

最后,transition_post_status 这个钩子在帖子的状态发生变化时会被调用,让你能处理状态过渡的逻辑,无论是从草稿变为已发布,还是其他状态之间的转换。

总之,管理员菜单和相关操作的钩子机制能帮助你精准控制后台的每一个细节,真是个强大的工具呀!

轻松掌握WordPress的各种钩子函数

每当你创建或更新帖子、页面时,不管是通过导入、编辑表单、xmlrpc,还是邮件发布,这个过程都会自动运行。动作函数的参数包括发布ID和发布对象。数据一旦保存到数据库,这个钩子就会被触发。不过要注意,帖子ID可能指的是某个帖子的修订版,而不是最新保存的版本。可以使用wp_is_post_revision()函数来获取真正的帖子ID。

接下来,聊聊更新元数据的钩子。当元数据被更新时,这个钩子会被激活。

还有一个和save_post类似的钩子,wp_insert_post,它也会在保存操作后立刻执行。

当你通过XMLRPC请求发布一个帖子,或者编辑一个已发布的帖子时,xmlrpc_publish_post这个钩子就会被调用。动作函数的参数是帖子ID。

说到分类和术语,create_term这个钩子会在新术语创建后、术语缓存清理之前被触发。而created_term则是在新术语创建并清理缓存后运行。

如果你为某个分类法创建新的术语,create $分类这个钩子会被调用,而created_ $分类则是在创建特定分类法中的新术语并清理缓存后运行。

从2.9.0版本开始,add_term_relationship这个钩子会在添加对象项关系之前和之后分别触发。

set_object_terms这个钩子会在设置对象条件后执行,而edit_terms则是在编辑术语之前运行。编辑完成后,edited_terms会被触发,保存分类法或类别的更改。

对于术语-分类法关系的更新,edit_term_taxonomy在更新之前触发,而edited_term_taxonomy则在更新完成后运行。从2.9.0版本开始,edit_term_taxonomies会在删除项的子项重新分配给父项之前运行,而edited_term_taxonomies则是在重新分配后运行。

对于特定分类法的编辑,edit_ $分类会在编辑术语后运行,随后,edited_ $分类在术语被编辑并清理缓存后触发。

在对帖子或条款进行修改之前,pre_delete_term这个钩子会被触发。而delete_term_taxonomy则会在删除术语分类法ID之前和之后运行。

从2.5.0版本开始,delete_term会在删除术语后触发,并清理缓存。而delete_ $ taxonomy则是在特定分类法中删除术语后运行。

在删除对象术语关系之前,delete_term_relationships会被激活,而在删除之后,Deleted_term_relationships会被触发。

clean_object_term_cache和clean_term_cache分别在清除对象术语缓存和每个分类法的术语缓存后运行。

split_shared_term这个钩子会在将之前共享的分类术语拆分成两个独立术语后运行。对于分类术语描述的保存,pre_term_description和pre_category_description会在保存之前触发。

接下来,我们谈谈评论、Ping和引用相关的动作。comment_closed钩子会在尝试显示评论表单但该帖子不允许评论时被触发,参数是帖子ID。

如果帖子ID未找到,comment_id_not_found就会被激活。而comment_flood_trigger则会在检测到评论泛滥时运行,提供上一条和当前评论的时间。

当评论状态发生变化时,comment_(旧状态)to(新状态)会被调用,参数是Comment对象。如果帖子是草稿,comment_on_draft在尝试显示评论表单时会被触发。

comment_post这个钩子在评论保存到数据库后立即运行,参数包括评论ID和批准状态。编辑评论时,edit_comment在更新后被调用,参数是评论ID。

在删除评论之前,delete_comment会立即触发,参数是评论ID。而删除后,Deleted_comment会被调用。

对于垃圾评论,垃圾评论这个钩子会在评论发送到垃圾箱之前触发,之后的垃圾评论则在评论被移入回收站后执行。

从垃圾桶还原评论时,untrash_comment会在还原之前触发,untrashed_comment则在还原之后被激活。至于标记为垃圾邮件的评论,spam_comment会在标记之前触发,而spammed_comment则是在标记后运行。最后,unspam_comment会在评论未标记为垃圾邮件之前触发。

WordPress 评论与链接操作的触发机制

unspammed_comment

这个函数会在评论还没被标记为垃圾邮件时就开始工作。它的参数是评论的ID。

pingback_post

当你在帖子上添加ping时,这个函数就会被触发,参数同样是评论的ID。

pre_ping

在处理ping之前,这个函数会先运行。它接收的参数是要处理的帖子链接的数组,以及帖子的“pung”设置。

trackback_post

当你添加引用链接到帖子时,这个函数就会被调用。它的参数也是评论的ID。

wp_blacklist_check

这个函数会运行来检查某条评论是否需要被列入黑名单。参数包括作者的姓名、邮箱、网址、评论内容、IP地址,以及用户的浏览器信息。你的函数可以选择拒绝评论,或者修改输入的参数,使其包含黑名单里的关键词。

wp_insert_comment

每当有新的评论被创建时,这个函数就会被触发。

wp_set_comment_status

当评论的状态发生变化时,这个函数就会运行。它的参数包括评论ID和新的状态字符串,比如“删除”、“批准”、“垃圾邮件”或“保留”。

Blogroll 操作

add_link

当一个新的Blogroll链接首次添加到数据库时,这个函数会被触发,参数是链接的ID。

delete_link

删除Blogroll链接时,这个函数被激活,参数同样是链接的ID。

edit_link

在编辑Blogroll链接时,这个函数会被调用,参数还是链接的ID。

提要操作

atom_entry

在每个博客条目的信息被打印出来后(但在结束条目标签之前),这个函数会运行。

atom_head

当博客的信息被打印到原子供稿之后,在第一个条目之前,这个函数会被触发。

atom_ns

这个函数在原子供稿的根XML元素内运行,用于添加名称空间。

commentrss2_item

在评论供稿中打印单条评论的信息后(但在结束item标签之前),这个函数会执行。参数包括评论ID和帖子ID。

do_feed_ (提要)

当生成供稿时,这个函数会运行,供稿的类型可以是rss2、atom、rdf等。它会在打印Feed之前执行,参数为true(评论供稿)或false(帖子供稿)。

rdf_header

在将博客信息打印到RDF供稿之后,即在第一个条目之前,这个函数会被触发。

rdf_item

在为RDF供稿中的每个博客条目打印信息后(但在结束item标签之前),这个函数运行。

rdf_ns

这个函数在RDF供稿的根XML元素内运行,用于添加名称空间。

rss_head

在博客信息打印到RSS供稿之后,在第一个条目之前,这个函数会被调用。

rss_item

在RSS供稿中打印每个博客条目信息后(但在结束item标签之前),这个函数会执行。

rss2_head

在将博客信息打印在RSS 2供稿中之后,在第一个条目之前,这个函数会被触发。

rss2_item

在RSS 2供稿中打印每个博客条目信息后(但在结束item标签之前),这个函数会运行。

rss2_ns

在RSS 2供稿的根XML元素内运行,添加名称空间。

模板操作

after_setup_theme

这个函数在主题初始化的时候会运行。通常用来执行主题的基本设置、注册和初始化操作。

comment_form

在由comment_form()呈现的评论表单底部,紧接着在之前,这个函数会被调用。参数是帖子ID。

comment_form_after

在结束后,由comment_form()呈现评论表单后,这个函数会运行。

do_robots

当模板文件选择器确定这是robots.txt请求时,这个函数会被触发。

do_robotstxt

在do_robots()函数中运行,然后打印出robots.txt文件的“禁止”列表。

get_footer

在模板调用footer.php模板文件之前,这个函数会被触发。

get_header

在模板调用get_header()函数时(在header.php模板文件加载之前),这个函数会被执行。

switch_theme

当博客的主题发生变化时,这个函数会被触发。参数是新主题的名称。这个函数只有在添加操作的主题被禁用时才会起作用。

after_switch_theme

当博客的主题切换后,这个函数会运行,参数是新主题的名称。这个函数只有在主题被启用时才有效,通常用于在启用主题时运行某些代码。

load-themes.php

当激活或停用一个主题(被其他主题替代)时,这个函数会被触发。

template_redirect

在决定用于显示所请求页面的模板文件之前,这个函数会运行。

wp_footer

当模板调用wp_footer()函数时,这个函数会被触发,通常是在博客页面的底部附近。

wp_head

当模板调用wp_head()函数时,这个函数会运行。通常在页面模板的顶部,之间。这个钩子没有参数。

wp_meta

在sidebar.php模板文件调用wp_meta()函数时,这个函数会运行,允许插件在侧栏中插入内容。

wp_print_scripts

这个函数在WordPress将注册的JavaScript脚本打印到页面的头部之前会被触发。

行政行为

activate_(插件文件名)

在插件首次激活时,这个函数会被触发。可以参考Function_Reference / register_activation_hook。

activity_box_end

在管理仪表板屏幕的活动框结束时,这个函数会运行。

add_category_form_pre

在将添加类别的表单放在管理菜单的屏幕上之前,这个函数会被触发。

add_option_(选项名称)

在add_option()函数添加WordPress选项后,这个函数会运行。参数包括选项名称和选项值。你需要为特定选项添加响应,比如在添加了“foo”选项之后才能响应的“add_option_foo”。

add_option

在将选项添加到数据库之前,这个函数会被触发。

add_option

在添加选项之后,这个函数会运行。

admin_head

在管理面板的HTML部分,这个函数会被触发。

WordPress后台操作的各种钩子介绍

首先说说admin_head-(page_hook)或admin_head-(plugin_page)。这个钩子会在特定的管理页面或插件生成的页面的HTML部分被调用。

接下来是admin_init。它在每个管理页面加载之前运行,你可以在wp-admin/admin.php、wp-admin/admin-post.php和wp-admin/admin-ajax.php找到相关代码。

然后是admin_footer-(plugin_page),这个钩子会在插件生成的管理页面底部运行。

还有admin_post_(操作)和admin_post_nopriv_(action),前者处理已登录用户的请求,而后者则为未登录用户处理GET或POST请求。

再说说admin_footer,这个钩子在管理面板的body标签结束时触发。

admin_enqueue_scripts的作用是让插件或主题能够在所有管理页面的HTML头部引入JavaScript和CSS。

admin_print_scripts也是在HTML头部中运行,用于添加JavaScript脚本到所有管理页面。

admin_print_scripts-(page_hook)或admin_print_scripts-(plugin_page)则是在特定插件生成的管理页面的HTML头部运行,以打印JavaScript脚本。比如说,使用add_management_page()、add_options_page()等函数时,就会用到这个钩子。

举个例子,函数myplugin_menu()可以这样写:

如果你用function_exists(’add_management_page’)来检查函数是否存在,接着可以调用$page = add_management_page(’myplugin’,’myplugin’,’manage_options’,’myplugin_slug’,’myplugin_admin_page’);

然后再加上add_action(“ admin_print_scripts- $ page”,’myplugin_admin_head’);

接下来的admin_print_styles则是在HTML头部中运行,用于添加CSS样式到所有管理页面。

admin_print_styles-(page_hook)或admin_print_style-(plugin_page)则是在特定管理页面使用wp_enqueue_style()引入样式时运行。

再来看看check_passwords。这个钩子在新用户创建时会验证密码的两次输入,动作函数的参数包括用户名和两个密码。

dbx_page_advanced会在管理菜单的页面编辑屏幕上“高级”部分的底部运行,而dbx_page_sidebar则在侧边栏底部运行。

dbx_post_advanced和dbx_post_sidebar也有类似的功能,只不过是针对帖子编辑屏幕。

deactivate_(插件文件名)钩子在插件被停用时触发。

delete_option_(选项名称)则在delete_option()函数删除WordPress选项后运行。你需要为特定选项添加响应操作,比如“ delete_option_foo”,以在删除“ foo”选项时执行某些操作。

delete_option钩子在选项被从数据库中删除之前运行,而deleted_option则在删除后运行。

当用户被删除时,delete_user会被触发,动作函数参数是用户的标识。

edit_category_form钩子在添加或编辑类别表单显示后、HTML表单标签结束之前运行,而edit_category_form_pre则是在表单放到屏幕上前运行。

edit_tag_form和edit_tag_form_pre的功能与之类似,只不过是针对标签的表单。

edit_form_top在WordPress帖子编辑屏幕上标题之前运行,而edit_form_after_title则是在标题之后、内置内容区域之前运行。

edit_form_after_editor会在帖子编辑器后面运行,而edit_form_advanced则是在帖子编辑表单的“高级”部分之前运行。

edit_page_form则是在页面编辑表单的“高级”部分之前运行。

edit_user_profile钩子在用户个人资料编辑屏幕的末尾附近运行。

加载-(页)这个钩子在管理菜单页面加载时触发,通常你不会直接添加这个操作。如果你需要直接使用,可以用add_options_page()等函数的返回值来获得动作名称。

登录表格钩子在登录表单末尾之前触发,而login_head则在登录页面的HTML头部之前运行。

忘记密码钩子在登录屏幕上显示“通过电子邮件获取密码”表单之前触发,而lostpassword_form则是在用于通过电子邮件检索用户密码的表单末尾运行。

lostpassword_post则是在用户请求密码重置邮件时运行,以允许插件在处理之前修改PHP的$ POST变量。

最后,manage_link_custom_column和manage_posts_custom_column钩子分别在Blogroll和帖子管理屏幕的未知列名时运行,可以帮助你自定义列的显示。

WordPress管理操作详解

manage_pages_custom_column

当你在“管理页面”的界面上看到不熟悉的列名时,这个动作就会被触发。函数会接收列名和页面ID作为参数。想了解更多的话,可以去“插件API /过滤器参考”查看manage_pages_columns过滤器,这里你可以添加自定义列哦。

manage_media_custom_column

遇到媒体管理界面上陌生的列名时,这个动作也会被启动。它同样接受列名和页面ID作为参数。想要自定义列的话,可以参考“插件API /过滤器参考”中的manage_media_columns过滤器。

manage _ {$ post_type} posts_custom_column

当你在管理自定义帖子类型的界面上看到未知的列名时,就会触发这个动作。函数参数包括列名和帖子ID。如果想添加自定义列,可以去看看“插件API /过滤器参考”中的manage _ ${post_type} posts_columns过滤器。

重设密码

在用户密码被重置为随机新密码之前,这个动作会被执行。

personal_options_update

当用户在管理界面更新自己的个人选项时,这个动作就会被触发。

plugins_loaded

所有插件加载完成后,这个动作会运行。

profile_personal_options

在用户个人资料编辑界面的“个人选项”部分末尾,会触发这个动作。

profile_update

更新用户配置文件时,这个动作会运行,函数参数是用户的标识。

quick_edit_custom_box

这个动作会在快速编辑器创建时触发,当列名不明确时也会运行。

register_form

在新用户注册表单的末尾之前,这个动作会被执行。

register_post

这个动作会在处理新的用户注册请求之前运行。

strict_manage_posts

在管理菜单上显示待编辑帖子列表之前,会触发这个动作。

找回密码

当用户需要找回密码时,这个动作会被执行,以便给他们发送提醒邮件,函数参数是登录名。

set_current_user

在wp_set_current_user()函数更改用户后,这个动作会运行。需要注意的是,wp_set_current_user()也是可以被插件覆盖的功能,具体可以参考插件API。

show_user_profile

在用户个人资料编辑界面的结尾附近,触发这个动作。

sidebar_admin_page

这个动作会在小部件管理页面的主要内容之后运行。

sidebar_admin_setup

在编辑侧边栏中显示的小部件时,尽早触发这个动作。

simple_edit_form

在管理菜单中的“简单”帖子编辑表单的末尾运行,默认情况下这个简单表单仅用于书签,不包含“高级”部分。

update_option(选项名称)

当update_option()函数更新WordPress选项后,这个动作会被触发。函数参数包括旧选项值和新选项值。想要监听特定选项的更新,需要添加相应的操作,比如“update_option_foo”。

update_option

这个动作会在选项更新到数据库之前执行。

Updated_option

在选项更新之后,这个动作会被触发。

upload_files(标签)

这个动作会在上传文件管理屏幕上显示,参数“标签”是自定义操作选项卡的名称。使用wp_upload_tabs过滤器定义自定义标签,详细信息可以参考插件API。

user_new_form

在“添加新用户”屏幕的末尾,这个动作会被触发。函数参数:在多站点中传递“add-existing-user”,单站点中传递“add-new-user”。

user_profile_update_errors

在将更新的用户信息提交到数据库之前,这个动作会执行。

wpmu_new_user

在多站点环境中首次创建用户配置文件时,这个动作会被触发,参数是用户的标识。如果不在多站点环境下,则会使用user_register。

user_register

当用户首次创建个人资料时,这个动作会运行,参数包括用户标识。

welcome_panel

这个动作让你能够隐藏仪表板中的“欢迎面板”,同时也会过滤掉相关的屏幕选项。

wp_ajax(动作)

还有个:wp_ajax_nopriv_(action)-这个动作用于执行未知类型的AJAX请求处理。

wp_authenticate

在用户登录时,这个动作会被触发,用于进行用户身份验证,函数参数是包含用户名和密码的数组。

wp_login

用户每次登录时,这个动作都会运行。

wp_logout

用户注销时,这个动作会被触发。

仪表板“立即操作”小部件操作

right_now_content_table_end

这个动作会在“立即操作仪表板”小部件的内容列底部添加一行表格。

right_now_table_end

在“立即显示板”小部件的“讨论”列中显示垃圾评论数量后,这个动作会被调用。

right_now_discussion_table_end

在显示垃圾评论数量之后,这个动作会在“立即显示板”小部件的“讨论”列中被调用。

right_now_end

在“立即显示板”小部件上显示当前版本信息后,这个动作会被触发。(注意:在v3.4中,这实际上是rightnow_end。请看故障单#21046。)

activity_box_end

最后一个动作就是在“立即显示板”小部件上被调用的。

进阶动作

这一部分包含了与WordPress查询、激活插件、显示帖子以及其他基础代码相关的操作。

activate_plugin

每当成功激活任意插件时,这个动作就会被触发。

add_meta_boxes

在“编辑帖子”页面加载时,这个动作会运行。(3.0及以上版本)

管理员菜单

管理员面板菜单的基本结构准备好后,这个动作会被触发。

network_admin_notices

在打印网络管理屏幕的管理菜单之前,这个动作会被调用。

user_admin_notices

在打印用户管理屏幕的管理菜单之前,这个动作会被触发。

admin_notices

在打印的管理菜单不是网络或用户管理屏幕时,这个动作会被执行。

all_admin_notices

在打印所有管理屏幕的菜单时,这个动作会被调用。

blog_privacy_selector

在默认博客隐私选项显示后,这个动作会被触发。

WordPress中的各种钩子,让你轻松掌控

check_admin_referer

其实,这个函数主要是为了安全考虑,当我们检查了随机数之后,默认的check_admin_referrer()函数就会被调用。这样一来,插件可以因安全原因让WordPress“休克”。值得一提的是,check_admin_referrer也是可以被插件覆盖的,想了解更多可以查阅插件API哦。

check_ajax_referer

当用户的登录信息通过cookie验证成功后,check_ajax_referer()函数就会启动。当AJAX请求指向wp-admin/admin-ajax.php时,这个函数会被调用,插件也能因安全原因让WordPress“休克”。同样,这个函数也是可插拔的,插件可以对其进行覆盖,具体的内容可以参考插件API。

custom_controls_enqueue_scripts

在调用custom_controls_init之后,这个钩子就会被触发。它的作用是执行一些操作并排队加载样式和脚本,这样你就可以为WP主题自定义器注册自己的脚本和样式了。这是从3.4版本开始支持的哦。

custom_register

这个钩子在每次请求时都会运行,允许开发者注册新的主题选项和控件,供主题自定义API使用。也是从3.4版本开始的哦。

custom_preview_init

通过这个钩子,你可以直接在主题自定义器中排队加载一些资源,比如JavaScript文件。它与主题自定义API搭配使用,从3.4版本起就可以了。

deactivated_plugin

每当成功停用任何插件时,这个钩子就会被触发。

generate_rewrite_rules

在生成重写规则之后,这个钩子就会被调用。需要注意的是,修改重写规则时,使用rewrite_rules_array过滤器会更方便些。

在里面

这个钩子在WordPress加载完成后,但在发送任何头信息之前会被触发,特别适合用来拦截$ _GET或$ POST的请求。

loop_end

当WordPress循环处理完最后一篇文章后,这个钩子就会被调用。

loop_start

在处理WordPress循环的第一篇文章之前,这个钩子会被触发。

network_admin_menu

在为“网络管理”页面准备基本菜单结构时,会调用这个钩子。

parse_query

这个钩子在主查询或WP_Query实例中的查询解析结束时触发,比如query_posts、get_posts或get_children等。动作函数的参数是WP_Query对象。

parse_request

在WordPress的主要函数wp解析查询请求后,这个钩子会被调用。动作函数的参数是WP对象。

pre_get_posts

在执行主查询或WP_Query的任何实例之前,这个钩子会被触发,比如query_posts()、get_posts()或get_children()。它在创建查询变量对象后调用,非常适合在运行主查询之前调整主查询。记得查看is_main_query()哦。动作函数的参数是WP_Query对象。

sanitize_comment_cookies

当HTTP请求读取cookie后,这个钩子会被触发。

send_headers

在主要的WordPress函数wp()发送基本HTTP头信息后,这个钩子会被调用。动作函数的参数是WP对象。

关掉

在页面输出完成后,这个钩子会被触发。

update(meta_type)meta

这个钩子在保存元数据时被触发。

Updated(meta_type)_meta

当元数据更新时,这个钩子会被调用。

upgrader_process_complete

当插件下载或升级程序类完成工作时,这个钩子就会被触发。

wp_loaded

一旦WordPress以及所有插件和主题都完全加载并实例化后,这个钩子会被调用。

wp

这个钩子在查询解析并加载后,但在任何模板执行之前被触发。如果你需要访问发布数据但又不能用模板输出,这个钩子会很有用。动作函数的参数是WP对象。

来源:百家号
原文标题:WordPress 插件开发用到的所有“钩子”函数
声明:
文章来自网络收集后经过ai改写发布,如不小心侵犯了您的权益,请联系本站删除,给您带来困扰,深表歉意!

文章评论 (8)

  1. 苏拾也 的头像
    苏拾也2026-01-24 06:03

    内容很实用,特别是钩子的用法,真是大开眼界。

  2. 奶夏舟 的头像
    奶夏舟2026-01-24 06:13

    希望能看到更多关于实际应用的案例,光有理论不够呀!

  3. 宓澜瑶 的头像
    宓澜瑶2026-01-24 06:23

    这篇文章让我知道了很多没听说过的钩子,真是开眼界,感谢分享!

  4. 叶糖月 的头像
    叶糖月2026-01-24 06:33

    钩子函数的名字也太多了吧,搞得我快记不住了,能不能分类整理一下?

  5. 羽星河 的头像
    羽星河2026-01-24 06:43

    刚接触WordPress插件开发,看到这些钩子让我有些无从下手,谁能分享一些实际应用的经验?

  6. 秋茶秋 的头像
    秋茶秋2026-01-24 06:53

    在我做插件开发时,遇到过钩子冲突的问题,不知道大家有没有类似经历,该如何解决呢?

  7. 白亦遥 的头像
    白亦遥2026-01-24 07:03

    我曾经遇到过使用钩子时,插件加载顺序导致功能失效的情况,大家有类似的经验吗?

  8. 北屿鹿 的头像
    北屿鹿2026-01-24 07:13

    内容很干货,特别是对初学者来说,了解这些钩子很重要。

发表评论