本文目录
[隐藏]
- 1处理默认 WordPress 样式
- 1.1从 WordPress 后台移除 ie.css
- 2处理 get_footer() 函数
- 2.1在页脚添加 JavaScript
- 3初始化管理面板
- 3.1禁止非管理员访问管理面板
- 4走进验证进程
- 4.1允许邮箱地址作为用户名进行登录
- 5玩转登录表单
- 5.1在登录表单显示警告信息
- 6处理管理菜单项
- 6.1去除不该被客户看到的菜单项
- 7和 wp() 函数一起工作
- 7.1快速添加 WordPress 定时任务
- 8控制管理面板页面的 <head>
- 8.1更改仪表盘的列数
- 9在工具条渲染前定制它
- 9.1添加一个新项目到工具条
- 10处理个人资料更新
- 10.1通知用户个人资料更新
- 11小结
本文是《50个 WordPress 动作挂钩》系列教程的第 3 部分,该系列共包含以下 7 个部分:
- 介绍50个 WordPress 动作挂钩
- 介绍50个 WordPress 动作挂钩(1-10)
- 介绍50个 WordPress 动作挂钩(11-20)
- 介绍50个 WordPress 动作挂钩(21-30)
- 介绍50个 WordPress 动作挂钩(31-40)
- 介绍50个 WordPress 动作挂钩(41-50)
- 介绍50个 WordPress 动作挂钩(总结)
在该系列的上一个部分,我们已经介绍了10个动作挂钩,在本篇教程中,我们继续通过例子来学习下来的10个挂钩。
处理默认 WordPress 样式
WordPress 有很多CSS文件,可以在后台和前台调用。通过 wp_default_styles
挂钩,我们可以修改 WordPress 的默认样式。
从 WordPress 后台移除 ie.css
如果只有你自己使用网站后台,而且不会使用IE浏览器,那就没必要加载修正IE所用的CSS文件,对吗?那你可以使用下面的代码来移除 ie.css:
1 2 3 4 5 6 7 8 9 |
<?php add_action( 'wp_default_styles', 'wp_default_styles_example' ); function wp_default_styles_example( $wp_styles ) { $wp_styles->remove( 'ie' ); } ?> |
事实上,我甚至认为 WordPress 可以不需要这个文件了,毕竟 ie.css 是为了修复 IE7和以下版本,据我所知,现在IE7的份额已经跌至 1% 以下了。
处理 get_footer() 函数
如果你要用到 get_footer() 函数,你不必进一步研究,直接可以通过 get_footer 挂钩来处理。
在页脚添加 JavaScript
比方说,你有一些 jQuery 代码需要添加到页脚,你可以使用下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php add_action( 'get_footer', 'get_footer_example' ); function get_footer_example( $name ) { if ( 'new' == $name ) { ?> <script> (function( $ ) { //put all your jQuery goodness in here. })( jQuery ); </script> <?php } } // Example Source: http://codex.wordpress.org/Plugin_API/Action_Reference/get_footer ?> |
上面我们使用了一些JavaScript代码在这个例子中,但你几乎可以在页脚中运行任何代码。
初始化管理面板
这个方便的小功能,在每次访问后台管理页面的时候被触发,所以它有很多不同的用途。只要是有创意!
禁止非管理员访问管理面板
假设你不希望订阅者访问管理面板,你网站也没有任何投稿者、作者和编辑,要想重定向所有非管理员到网站首页,你可以使用下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php add_action( 'admin_init', 'admin_init_example', 1 ); function admin_init_example() { if ( ! current_user_can( 'manage_options' ) && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) { wp_redirect( site_url() ); exit; } } // Example Source: http://codex.wordpress.org/Plugin_API/Action_Reference/admin_init ?> |
如有需要,你可以修改重定向地址,仅仅删除 site_url() 然后在单引号填写其他网址即可(比如 ‘http://www.google.com/’)
走进验证进程
这个挂钩的介绍文档中只有简单的一句:“用来在用户登录的时候进行验证”。
允许邮箱地址作为用户名进行登录
WordPress 默认不允许使用用户的邮箱进行登录 —— 你不得不记住你的用户名。如果你的用户总是会忘记他们的用户名,那你可以使用下面的代码,然后告诉你的用户也可以使用邮箱登录网站哦:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php add_action( 'wp_authenticate', 'wp_authenticate_example' ); function wp_authenticate_example( $username ) { $user = get_user_by( 'email', $username ); if ( ! empty( $user->user_login ) ) { $username = $user->user_login; } return $username; } // Example Source: http://bavotasan.com/2011/log-in-to-wordpress-using-an-email-address/ ?> |
关联文章:让WordPress支持用户名或邮箱登录
玩转登录表单
login_form 挂钩允许我们操控经典的WordPress 登录表单。
在登录表单显示警告信息
在上面的例子中,我们展示了如何让你的用户使用他们的邮箱登录网站,如果你不喜欢这样修改,你可以告诉他们,不能使用他们的邮箱地址登录网站:
1 2 3 4 5 6 7 8 9 |
<?php add_action( 'login_form', 'login_form_example' ); function login_form_example() { echo '<p><strong>Remember:</strong> You must enter your username, not your email address!</p>'; } ?> |
当然, 你还可以设置为其他信息,比如“如果你在一台公用电脑上登录,不要点击‘记住我’!”或者其他任何信息,包括HTML代码。
处理管理菜单项
就想定义说的一样“在基础的管理菜单结构到位之后运行”,admin_menu 挂钩让我们可以从WordPress管理菜单中删除菜单项(包括子菜单项),或者添加新菜单项(包括子菜单项)到管理菜单中。
去除不该被客户看到的菜单项
这是一个对开发者来说非常熟悉的场景:客户需要访问一个特定插件的设置界面,但是他们不应该去修改WordPress自身设置页面的任何设置。
简而言之,有些页面是客户必须访问的,而有些是不应该访问的。下面的例子就可以帮助我们从管理菜单中移除菜单项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php if ( ! current_user_can( 'manage_options' ) ) { add_action( 'admin_menu', 'admin_menu_example' ); } function admin_menu_example() { remove_menu_page( 'index.php' ); //Dashboard remove_menu_page( 'edit.php' ); //Posts remove_menu_page( 'upload.php' ); //Media remove_menu_page( 'edit.php?post_type=page' ); //Pages remove_menu_page( 'edit-comments.php' ); //Comments remove_menu_page( 'themes.php' ); //Appearance remove_menu_page( 'plugins.php' ); //Plugins remove_menu_page( 'users.php' ); //Users remove_menu_page( 'tools.php' ); //Tools remove_menu_page( 'options-general.php' ); //Settings } // Example Source: http://wpsnippy.com/remove-top-level-wordpress-dashboard-menu/ ?> |
记得根据自己的实际需要,注销或删除以上的某些代码行。
和 wp() 函数一起工作
一起来看下文档对于这个挂钩的介绍:
该挂钩在查询分析和文章加载之后,并且模板执行之前,在 WordPress 主函数 wp() 内执行。当你需要访问文章数据但是又不能使用模板来输出时,这个挂钩就非常有用。
简而言之,它在查询加载之后触发。
快速添加 WordPress 定时任务
虽然定时任务(cron jobs)通常被挂载到 plugin activation hook,但我们也是可以使用 wp 这个挂钩来挂载定时任务的。让我们看下官方文档中的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php add_action( 'wp', 'prefix_setup_schedule' ); /** * On an early action hook, check if the hook is scheduled - if not, schedule it. */ function prefix_setup_schedule() { if ( ! wp_next_scheduled( 'prefix_hourly_event' ) ) { wp_schedule_event( time(), 'hourly', 'prefix_hourly_event'); } } add_action( 'prefix_hourly_event', 'prefix_do_this_hourly' ); /** * On the scheduled action hook, run a function. */ function prefix_do_this_hourly() { // do something every hour } // Example Source: http://codex.wordpress.org/Function_Reference/wp_schedule_event ?> |
注意:这里还有另外一个挂钩 prefix_hourly_event,它是在同样的代码片段中自动创建的,作为 wp_schedule_event() 函数的第三个参数。
控制管理面板页面的 <head>
有各种挂钩(动作和过滤)在他们的名字上就包含了“参数”。admin_head-(page_name) 就是其中之一,它会在定义了参数的这个特定管理页面的<head> 中调用。
更改仪表盘的列数
我使用一个 22吋 的显示器,自从 WordPress 3.8 以后,我被迫使用4列仪表盘,这让我非常烦恼。我不能确定为什么我不能像之前那样设置列数,好在我发现了下面这个代码可以解决这个问题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php add_action( 'admin_head-index.php', 'admin_head_index_php_example' ); function admin_head_index_php_example() { add_screen_option( 'layout_columns', array( 'max' => 3, 'default' => 3 ) ); } // Example Source: http://wpsnippy.com/bring-back-dashboard-screen-layout-options-wordpress-3-8/ ?> |
现在我可以像过去那样根据屏幕宽度来更改列数。虽然我还是没办法在笔记本上设置超过2列,但我认为我可以这样将就使用。
在工具条渲染前定制它
WordPress 的工具条,就是之前的管理栏,是一个伟大和有用的导航元素,可以在后台和前台帮助我们。wp_before_admin_bar_render 挂钩可以帮助我们在它渲染前进行交互操作。
添加一个新项目到工具条
如果你想要添加一个快捷链接让客户可以联系到你,你可以使用下面的代码添加一个链接到工具条:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php add_action( 'wp_before_admin_bar_render', 'wp_before_admin_bar_render_example' ); function wp_before_admin_bar_render_example() { global $wp_admin_bar; $wp_admin_bar->add_node( array( 'id' => 'contact-designer', 'title' => 'Contact Designer', 'href' => 'http://barisunver.com.tr/contact/', 'meta' => array( 'target' => '_blank' ) ) ); } ?> |
很简单,不是吗?你可以多次使用 add_node() 函数添加更多链接哦。
处理个人资料更新
profile_update 挂钩让我们获取和处理用户数据后更新到数据库中。
通知用户个人资料更新
假设你想要在用户每次更新了个人资料时通知他。通过下面的钩子和小函数,你可以做到:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php add_action( 'profile_update', 'profile_update_example' ); function profile_update_example( $user_id ) { $site_url = get_bloginfo( 'name' ); $user_info = get_userdata( $user_id ); $user_name = $user_info->display_name; $user_email = $user_info->user_email; $subject = "Profile updated"; $message = "Hello $user_name,\n\nYour profile has been updated! Please contact us if you're not the one who changed your profile.\n\nThank you for visiting $site_name."; wp_mail( $user_email, $subject, $message ); } // Example Source: http://wpsnipp.com/index.php/functions-php/send-email-notification-when-profile-updates/ ?> |
在我看来,这是一个简单但有效的安全措施。但是它不是一直有效的,因为如果一个潜在的黑客更改用户的电子邮件地址,电子邮件将被发送到新的电子邮件地址。
小结
我们已经介绍完了 50 个动作挂钩的第二部分,希望你们喜欢和从中学到新东西。下节课再见!
- 原文出自:http://code.tutsplus.com/tutorials/fifty-actions-of-wordpress-50-examples-11-to-20–cms-21579
- 由 稻草人@WordPress大学 原创翻译,未经允许,禁止转载和采用本译文。
阅读该系列的其他文章: 上一篇:介绍50个 WordPress 动作挂钩(1-10) 下一篇:介绍50个 WordPress 动作挂钩(21-30)