文本是《50个 WordPress 动作挂钩(共7篇)》专题的第 3 篇。阅读本文前,建议先阅读前面的文章:
在该系列的上一个部分,我们已经介绍了10个动作挂钩,在本篇教程中,我们继续通过例子来学习下来的10个挂钩。
处理默认 WordPress 样式
WordPress 有很多CSS文件,可以在后台和前台调用。通过 wp_default_styles
挂钩,我们可以修改 WordPress 的默认样式。
从 WordPress 后台移除 ie.css
如果只有你自己使用网站后台,而且不会使用IE浏览器,那就没必要加载修正IE所用的CSS文件,对吗?那你可以使用下面的代码来移除 ie.css:
<?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 代码需要添加到页脚,你可以使用下面的代码:
<?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代码在这个例子中,但你几乎可以在页脚中运行任何代码。
初始化管理面板
这个方便的小功能,在每次访问后台管理页面的时候被触发,所以它有很多不同的用途。只要是有创意!
禁止非管理员访问管理面板
假设你不希望订阅者访问管理面板,你网站也没有任何投稿者、作者和编辑,要想重定向所有非管理员到网站首页,你可以使用下面的代码:
<?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 默认不允许使用用户的邮箱进行登录 —— 你不得不记住你的用户名。如果你的用户总是会忘记他们的用户名,那你可以使用下面的代码,然后告诉你的用户也可以使用邮箱登录网站哦:
<?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 登录表单。
在登录表单显示警告信息
在上面的例子中,我们展示了如何让你的用户使用他们的邮箱登录网站,如果你不喜欢这样修改,你可以告诉他们,不能使用他们的邮箱地址登录网站:
<?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自身设置页面的任何设置。
简而言之,有些页面是客户必须访问的,而有些是不应该访问的。下面的例子就可以帮助我们从管理菜单中移除菜单项:
<?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 这个挂钩来挂载定时任务的。让我们看下官方文档中的例子:
<?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列仪表盘,这让我非常烦恼。我不能确定为什么我不能像之前那样设置列数,好在我发现了下面这个代码可以解决这个问题:
<?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 挂钩可以帮助我们在它渲染前进行交互操作。
添加一个新项目到工具条
如果你想要添加一个快捷链接让客户可以联系到你,你可以使用下面的代码添加一个链接到工具条:
<?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 挂钩让我们获取和处理用户数据后更新到数据库中。
通知用户个人资料更新
假设你想要在用户每次更新了个人资料时通知他。通过下面的钩子和小函数,你可以做到:
<?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 动作挂钩(共7篇)》专题的第 3 篇。请继续阅读该专题下面的文章: