介绍50个 WordPress 动作挂钩(1-10)
在该系列的上一部分,我们已经对 WordPress 动作挂钩做了一个简单的介绍,在这个教程中,我们将开始介绍所选的 50 个动作挂钩,以及通过例子说明它们的用途。
事不宜迟,我们现在就开始介绍前10个动作挂钩!
处理 WordPress 初始化
这个动作挂钩 init,简而言之,就是在初始化之后开始调用的,这就是为什么这个挂钩可能是有史以来最流行的 WordPress 动作挂钩 —— 因为你可以挂载几乎任何东西。
更改部分默认的重写规则
作为一个土耳其 WordPress 用户,我觉得很奇怪(和令人沮丧),WordPress 不允许我们在管理后台更改这些页面的URL前缀:作者页面、搜索结果或分页存档页。
但是,通过下面的代码,就可以帮助我解决以上问题:
<?php
add_action( 'init', 'init_example' );
function init_example() {
global $wp_rewrite;
$wp_rewrite->author_base = 'profile';
$wp_rewrite->search_base = 'find';
$wp_rewrite->pagination_base = 'p';
}
?>
很酷吧? (当然,我用 ‘profile’、 ‘find’ 和 ‘p’ 替换了土耳其单词。)
发送 HTTP 头
这个不需要多做解释,它自身的名字已经说明了:这个方便的小挂钩允许我们设置要发送的 HTTP 头!
让 IE 使用最新的渲染引擎
X-UA-Compatible Meta标签允许设置IE使用特定的渲染引擎来打开网页,如果你设置为 “edge”,IE 将使用最新的渲染引擎,然而,如果使用 Google Chrome 框架,将可能无法通过 HTML 验证。
幸运的是,我们可以不局限于 <meta> 标签的用法,我们也可以使用 HTTP 头。而 send_headers
挂钩就可以做到:
<?php
add_action( 'send_headers', 'send_headers_example' );
function send_headers_example() {
header( 'X-UA-Compatible: IE=edge,chrome=1' );
}
// Example Source: http://codex.wordpress.org/Plugin_API/Action_Reference/send_headers
?>
切换主题
如果你想切换主题后运行某些函数,你可以使用 after_switch_theme 挂钩。
在切换主题后刷新重写规则
举个简单的例子:如果你的新主题使用了自定义文章类型,你切换到这个新主题后,怎样刷新重写规则?
好吧,下面的代码就可以实现:
<?php
add_action( 'after_switch_theme', 'after_switch_theme_example' );
function after_switch_theme_example() {
flush_rewrite_rules();
}
// Example Source: https://codex.wordpress.org/Function_Reference/flush_rewrite_rules
?>
很容易,对吧?
出于某种原因,我没办法让 flush_rewrite_rules() 这个函数,在挂载到 after_switch_theme 挂钩以后可以正常工作,如果你知道为什么,请在评论中告诉我们,谢谢。
添加自定义列到文章列表
这个挂钩允许我们在管理后台的“所有文章”的文章列表中添加额外的列。
在列中显示文章的附件数
假设你要了解每篇文章的附件数,因为,比如说,你要确认每篇文章使用10个图片作为图册显示,与其在媒体库中一个个数,但不如直接在文章列表中统计出来:
<?php
add_filter( 'manage_posts_columns', 'manage_posts_columns_example', 5 );
add_action( 'manage_posts_custom_column', 'manage_posts_custom_column_example', 5, 2 );
function manage_posts_columns_example( $columns ) {
$columns['post_attachments'] = __( 'Attached', 'theme-name' );
return $columns;
}
function manage_posts_custom_column_example( $column_name, $post_id ) {
if( 'post_attachments' == $column_name ) {
$attachments = get_children( array( 'post_parent' => $post_id ) );
$count = count( $attachments );
if( $count != 0 ) {
echo $count;
}
}
}
// Example Source: http://wpsnipp.com/index.php/functions-php/display-post-attachment-count-in-admin-column/
?>
当然,这是一个非常特殊的情况下的一个例子。但请记住,你在 tutsplus 看到的代码 – 你永远不知道什么时候你会需要它!
操作管理页面的 <head>
时不时地,我们需要添加一些自定义东西到管理后台页面的 <head> 中,admin_head 这个挂钩就可以做到!
在管理后台显示不同的 Favicon 图标
以下代码演示了将一段自定义 Favicon 图标的HTML代码嵌入到后台页面的<head>中:
<?php
add_action( 'admin_head', 'admin_head_example' );
function admin_head_example() {
echo '<link rel="shortcut icon" type="image/x-icon" href="' . get_bloginfo('template_directory') . '/images/admin-favicon.ico" />';
}
// Example Source: http://wpdevsnippets.com/wp-admin-custom-favicon/
?>
添加一个 admin-favicon.ico 图标文件到你主题的 /images/ 目录即可生效!
注入代码到 wp_footer() 函数
wp_footer 挂钩可以在 wp_footer() 函数运行的地方调用其他函数,你可以通过这个来定义函数的输出。
为管理员显示简要的性能报告
想要了解页面加载时进行了多少次查询,使用了多少内存?下面的代码可以帮到你:
<?php
add_action( 'wp_footer', 'wp_footer_example' );
function wp_footer_example() {
$stat = sprintf( '%d queries in %.3f seconds, using %.2fMB memory',
get_num_queries(),
timer_stop( 0, 3 ),
memory_get_peak_usage() / 1024 / 1024
);
if( current_user_can( 'manage_options' ) ) {
echo "<!-- {$stat} -->";
}
}
// Example Source: http://wordpress.stackexchange.com/a/1866
?>
现在你可以在网页源代码中看到一个注释来显示页面的查询和内存使用信息,不用担心:非管理员是看不到这些信息的。
处理前端脚本队列
如果你正在折腾主题,这个挂钩是你必须要了解的: wp_enqueue_scripts
挂钩,用来处理前端的JS和CSS脚本队列输出。
wp_enqueue_script() 函数的正确用法
有很多种方法可以在前端加载js和css,但是通过下面的方法才是唯一正确的:
<?php
add_action( 'wp_enqueue_scripts', 'wp_enqueue_scripts_example' );
function wp_enqueue_scripts_example() {
// you can enqueue scripts...
wp_enqueue_script( 'my-script', get_stylesheet_directory_uri() . '/scripts/my-script.js' );
// ...and styles, too!
wp_enqueue_style( 'my-style', get_stylesheet_directory_uri() . '/styles/my-style.css' );
}
?>
创建管理后台通知
admin_notices 挂钩是用来在管理后台的头部显示所有 警告、错误和其他信息的,你也可以用来显示自己的信息。
提示已登录的用户网站正在维护
如果你正在迁移服务器,你需要提示你的作者不要在这个维护时间内发布任何内容,你可以对所有非管理员锁定后台页面,也可以使用下面的代码显示一个提示信息:
<?php
add_action( 'admin_notices', 'admin_notices_example' );
function admin_notices_example() {
echo '<div class="error">
<p>We are performing website maintenance. Please don\'t make any changes in your posts until further notice!</p>
</div>';
}
// Example Source: http://wpsnippy.com/show-notification-message-wordpress-admin-pages/
?>
在这里,我们使用了 “error” 类,如果你要显示一个绿色框(意味着更像一个”成功“信息),你可以使用 “updated” 类。
处理小工具的初始化
WordPress 的小工具是一个优秀的系统,它允许我们开发人员创建和编辑我们网站的某些部分。使用 widgets_init 挂钩可以让我们进行一些修改小工具的行为。
禁止加载默认的小工具
出于某些原因,你可能需要禁用 WordPress 默认的小工具,下面的代码可以帮助你移除它们:
<?php
add_action( 'widgets_init', 'widgets_init_example' );
function widgets_init_example() {
unregister_widget( 'WP_Widget_Pages' );
unregister_widget( 'WP_Widget_Calendar' );
unregister_widget( 'WP_Widget_Archives' );
unregister_widget( 'WP_Widget_Links' );
unregister_widget( 'WP_Widget_Meta' );
unregister_widget( 'WP_Widget_Search' );
unregister_widget( 'WP_Widget_Text' );
unregister_widget( 'WP_Widget_Categories' );
unregister_widget( 'WP_Widget_Recent_Posts' );
unregister_widget( 'WP_Widget_Recent_Comments' );
unregister_widget( 'WP_Widget_RSS' );
unregister_widget( 'WP_Widget_Tag_Cloud' );
}
?>
当然,你可以注销上面的某些行,可以让某些默认小工具继续可用。
删除 WordPress 用户
需要在删除用户的同时做些什么?你可以使用 delete_user 挂钩。
删除用户时邮件通知他
如果你有一个网站,偶尔吸引了不好的人,你需要经常删除用户,你可能要考虑让他们知道他们的用户帐户将被删除。下面的代码片段可以帮助你:
<?php
add_action( 'delete_user', 'delete_user_example' );
function delete_user_example( $user_id ) {
global $wpdb;
$user_obj = get_userdata( $user_id );
$email = $user_obj->user_email;
$headers = 'From: ' . get_bloginfo( 'name' ) . ' <' . get_bloginfo( 'admin_email' ) . '>' . "\r\n";
$subject = 'You are being deleted, brah';
$message = 'Your account at ' . get_bloginfo( 'name' ) . ' has been deleted because of your totally uncool behaviors.';
wp_mail( $email, $subject, $message, $headers );
}
// Example Source: http://codex.wordpress.org/Plugin_API/Action_Reference/delete_user
?>
你可以修改 $subject
和 $message
的值来定义邮件通知的内容。
今日小结
在这篇文章中,我们介绍了50个动作挂钩的10个,希望你喜欢和从中学到新东西,下节课再见!
- QQ群:253510359
- 建议:VPS商家层出不穷,根据需要购买,切莫剁剁剁!
- 评测:很多VPS虽已评测,但网络环境改变稳定性,速度也会随之改变.评测只能作为一般性参考.不负任何法律,道义责任.
- 申明:所有vps,域名,服务器优惠信息均来自网络公开内容,由于水平有限不免有谬误.请以官方为准.