WordPress 常用的动作钩子
用磁铁和钩子制作墙面挂钩 #生活乐趣# #生活艺术# #日常生活艺术# #日常手工制作#
WordPress 有许多动作钩子,有一些是很常用的。
plugins_loaded
对插件开发者来说,plugins_loaded 动作钩子也许是最重要的动作钩子了。它在大多数 WordPress 文件加载完成之后,并在pluggable 函数和 WordPress 开始执行任何东西之前触发。在大多数的插件中,在这个钩子触发之前,不应该执行其他的代码。plugins_loaded 在所有用户启用的插件都被 WordPress 加载之后执行。这也是在加载过程中插件开发这最早能用到的钩子。
WordPress 的插件应该在这个钩子中执行安装。其他动作也应该添加到这个钩子的回调函数中。
下面的例子中,使用前面部分创建的 boj_example_footer_message 动作。要把它添加到钩到 plugins_loaded 钩子中的安装动作中,而不是单独调用它。
<span class="sh_symbol"><?</span>php
<span class="sh_function" style="font-weight: bold;">add_action</span><span class="sh_symbol">(</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'plugins_loaded'</span><span class="sh_symbol">,</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'boj_footer_message_plugin_setup'</span> <span class="sh_symbol">);</span>
<span class="sh_keyword" style="color: rgb(165, 42, 42);">function</span> <span class="sh_function" style="font-weight: bold;">boj_footer_message_plugin_setup</span><span class="sh_symbol">()</span> <span class="sh_cbracket">{</span>
<span class="sh_comment" style="color: rgb(255, 0, 0);">/* 添加 footer 信息动作 */</span>
<span class="sh_function" style="font-weight: bold;">add_action</span><span class="sh_symbol">(</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'wp_footer'</span><span class="sh_symbol">,</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'boj_example_footer_message'</span><span class="sh_symbol">,</span> <span class="sh_number" style="color: rgb(255, 0, 255);">100</span> <span class="sh_symbol">);</span>
<span class="sh_cbracket">}</span>
<span class="sh_keyword" style="color: rgb(165, 42, 42);">function</span> <span class="sh_function" style="font-weight: bold;">boj_example_footer_message</span><span class="sh_symbol">()</span> <span class="sh_cbracket">{</span>
echo <span class="sh_string" style="color: rgb(255, 0, 255);">'基于 <a href="http://wordpress.org" >WordPress </a>架设。'</span><span class="sh_symbol">;</span>
<span class="sh_cbracket">}</span>
<span class="sh_symbol">?></span>
创建一个安装函数并把它钩到 plugins_loaded 中。这样做就可以确保不会由于特定的 WordPress 函数还没有加载而触发错误。
init
init 钩子在大多数的 WordPress 都建立之后。WordPress 同样添加许多内部的功能到这个钩子中,例如 post types 和 taxonomies 的厨厕以及默认 widgets 的初始化。
因为这时几乎 WordPress 中的所有内容都就绪了,当 WordPress 的所有信息都可用时,你的插件使用这个钩子差不多可以做任何需要的事情了。
下面的例子中,为用户添加了给 pages 写摘要的功能。这应该在 init 中执行,因为 “page” post type 在这时使用 add_post_type_support() 函数来创建。( 详见 Part-11, “扩展 posts”)
<span class="sh_symbol"><?</span>php
<span class="sh_function" style="font-weight: bold;">add_action</span><span class="sh_symbol">(</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'init'</span><span class="sh_symbol">,</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'boj_add_excerpts_to_pages'</span> <span class="sh_symbol">);</span>
<span class="sh_keyword" style="color: rgb(165, 42, 42);">function</span> <span class="sh_function" style="font-weight: bold;">boj_add_excerpts_to_pages</span><span class="sh_symbol">()</span> <span class="sh_cbracket">{</span>
<span class="sh_function" style="font-weight: bold;">add_post_type_support</span><span class="sh_symbol">(</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'page'</span><span class="sh_symbol">,</span> <span class="sh_function" style="font-weight: bold;">array</span><span class="sh_symbol">(</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'excerpt'</span> <span class="sh_symbol">)</span> <span class="sh_symbol">);</span>
<span class="sh_cbracket">}</span>
<span class="sh_symbol">?></span>
admin_menu
admin_menu 钩子在管理员页面加载的时候调用。无论何时你的插件直接在管理页面下工作,你都要用这个钩子来执行你的代码。
下面的例子添加了一个内容是 BOJ Settings 的 sub-menu 项到 WordPress 管理页面的设置菜单。(详见:Part-7,”插件设置”)
<span class="sh_symbol"><?</span>php
<span class="sh_function" style="font-weight: bold;">add_action</span><span class="sh_symbol">(</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'admin_menu'</span><span class="sh_symbol">,</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'boj_admin_settings_page'</span> <span class="sh_symbol">);</span>
<span class="sh_keyword" style="color: rgb(165, 42, 42);">function</span> <span class="sh_function" style="font-weight: bold;">boj_admin_settings_page</span><span class="sh_symbol">()</span> <span class="sh_cbracket">{</span>
<span class="sh_function" style="font-weight: bold;">add_options_page</span><span class="sh_symbol">(</span>
<span class="sh_string" style="color: rgb(255, 0, 255);">'BOJ Settings'</span><span class="sh_symbol">,</span>
<span class="sh_string" style="color: rgb(255, 0, 255);">'BOJ Settings'</span><span class="sh_symbol">,</span>
<span class="sh_string" style="color: rgb(255, 0, 255);">'manage_options'</span><span class="sh_symbol">,</span>
<span class="sh_string" style="color: rgb(255, 0, 255);">'boj_admin_settings'</span><span class="sh_symbol">,</span>
<span class="sh_string" style="color: rgb(255, 0, 255);">'boj_admin_settings_page'</span>
<span class="sh_symbol">);</span>
<span class="sh_cbracket">}</span>
<span class="sh_symbol">?></span>
template_redirect
template_redirect 动作钩子很有用,因为它是 WordPress 知道用户正在浏览的页面的关键。它在特定的页面选择 theme template 之前执行。在只在网站的前端触发,并不在管理员页面触发。
当你需要为特定的页面加载代码的时候,这个钩子很有用。
下面的例子中,仅仅为 singular post 加载一个样式表文件。
<span class="sh_symbol"><?</span>php
<span class="sh_function" style="font-weight: bold;">add_action</span><span class="sh_symbol">(</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'template_redirect'</span><span class="sh_symbol">,</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'boj_singular_post_css'</span> <span class="sh_symbol">);</span>
<span class="sh_keyword" style="color: rgb(165, 42, 42);">function</span> <span class="sh_function" style="font-weight: bold;">boj_singular_post_css</span><span class="sh_symbol">()</span> <span class="sh_cbracket">{</span>
<span class="sh_keyword" style="color: rgb(165, 42, 42);">if</span><span class="sh_symbol">(</span> <span class="sh_function" style="font-weight: bold;">is_singular</span><span class="sh_symbol">(</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'post'</span> <span class="sh_symbol">)</span> <span class="sh_symbol">)</span> <span class="sh_cbracket">{</span>
<span class="sh_function" style="font-weight: bold;">wp_enqueue_style</span> <span class="sh_symbol">(</span>
<span class="sh_string" style="color: rgb(255, 0, 255);">'boj-singular-post'</span><span class="sh_symbol">,</span>
<span class="sh_string" style="color: rgb(255, 0, 255);">'boj-example.css'</span><span class="sh_symbol">,</span>
<span class="sh_keyword" style="color: rgb(165, 42, 42);">false</span><span class="sh_symbol">,</span>
<span class="sh_number" style="color: rgb(255, 0, 255);">0.1</span><span class="sh_symbol">,</span>
<span class="sh_string" style="color: rgb(255, 0, 255);">'screen'</span>
<span class="sh_symbol">);</span>
<span class="sh_cbracket">}</span>
<span class="sh_cbracket">}</span>
<span class="sh_symbol">?></span>
wp_head
在网站的前端,WordPress 的模板调用 wp_head() 函数,会触发 wp_head 钩子。插件使用这个钩子在 <head> 和 </head> 标签之间添加 HTML。
下面的例子中在前端添加一个 meta description。
<span class="sh_symbol"><?</span>php
<span class="sh_function" style="font-weight: bold;">add_action</span><span class="sh_symbol">(</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'wp_head'</span><span class="sh_symbol">,</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'boj_front_page_meta_description'</span> <span class="sh_symbol">);</span>
<span class="sh_keyword" style="color: rgb(165, 42, 42);">function</span> <span class="sh_function" style="font-weight: bold;">boj_front_page_meta_description</span><span class="sh_symbol">()</span> <span class="sh_cbracket">{</span>
<span class="sh_comment" style="color: rgb(255, 0, 0);">/* 得到站点描述 */</span>
$description <span class="sh_symbol">=</span> <span class="sh_function" style="font-weight: bold;">esc_attr</span><span class="sh_symbol">(</span> <span class="sh_function" style="font-weight: bold;">get_bloginfo</span><span class="sh_symbol">(</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'description'</span> <span class="sh_symbol">)</span> <span class="sh_symbol">);</span>
<span class="sh_comment" style="color: rgb(255, 0, 0);">/* 如果 description 设置了,显示 meta 元素 */</span>
<span class="sh_keyword" style="color: rgb(165, 42, 42);">if</span> <span class="sh_symbol">(</span> <span class="sh_symbol">!</span><span class="sh_function" style="font-weight: bold;">empty</span><span class="sh_symbol">(</span> $description <span class="sh_symbol">)</span> <span class="sh_symbol">)</span>
echo <span class="sh_string" style="color: rgb(255, 0, 255);">'<meta name="description" content="'</span><span class="sh_symbol">.</span> $description<span class="sh_symbol">.</span> <span class="sh_string" style="color: rgb(255, 0, 255);">'"/>'</span><span class="sh_symbol">;</span>
<span class="sh_cbracket">}</span>
<span class="sh_symbol">?></span>
有些插件错误的使用了 wp_head 动作钩子来添加 JavaScript 代码,实际上应该使用 wp_enqueue_script() 函数的。( 详见:Part-12,”JavaScript 和 AJAX “)。唯一一种使用这个钩子来添加 JavaScript 的情形是当 JavaScript 代码不在一个单独的文件中时。
网址:WordPress 常用的动作钩子 https://www.yuejiaxmz.com/news/view/590804
相关内容
改进WordPress工作流程的三大方式国内用WordPress做的网站有哪些
WordPress + WooCommerce = 你自己的网店
生活常识热门资讯网站WordPress模板
十大WordPress安全设置技巧
用wordpress打造的第一个小程序:图书共享借阅
WordPress开发入门05:模板标签
修改 WordPress 搜索结果的链接样式
WordPress › Error
WooCommerce 优惠券及促销指南 – WordPress大学