介绍50个 WordPress 动作挂钩(41-50)

如果你一直在更随我们学习这个系列,那你应该知道我们正在介绍 WordPress 的50个动作挂钩。如果你是刚加入我们,建议你先看下之前的文章,然后跟着继续学习更多。

那样的话可以让你跟上我们现在的进度。

让我们开始吧!

在插件管理页面插入<head>标签

通过admin_head-(plugin_page)动作可以在指定的插件页面插入代码到<head>标签中。

向你的插件管理页面添加样式

如果你想要添加一些CSS样式到你的插件选项页面中,下面的代码将会帮助到你:

<?php
add_action( 'admin_head-tools_page_myplugin/myplugin', 'admin_head_plugin_page_example' );
function admin_head_plugin_page_example() {
    echo '<style type="text/css">'
       . '/* your style here */'
       . '</style>';
}
// Example Source: http://codex.wordpress.org/Plugin_API/Action_Reference/admin_head-(plugin_page)
?>

在你的CSS中修改注释掉的代码,把动作名称(tools_page_mypluin/mypluin)的第二部分替换为你自己的插件名称,最后就能实现想要的效果。

在Pings触发之前操作它

“Pings”是WordPress最古老的特色之一,pre_ping这个动作可以让我们在pings触发之前操作它。

禁止Pings自己

WordPress在执行pings时,无法区分内部链接和外部链接。利用下面简短的代码,你可以禁止对自己执行pings:

<?php
add_action( 'pre_ping', 'pre_ping_example' );
function pre_ping_example( &$links ) {
    foreach ( $links as $l => $link ) {
        if ( 0 === strpos( $link, get_home_url() ) ) {
            unset( $links[ $l ] );
        }
    }
}
// Example Source: http://wpdevsnippets.com/remove-slef-pings/
?>

WordPress在执行pings时,无法区分内部链接和外部链接。利用下面简短的代码,你可以禁止对自己执行pings:

使用get_header()函数

get_header动作会在模板调用get_header()函数时被触发,利用好这个函数可以修改WordPress前端的头部(header)。

激活一个简单的维护模式

如果你很忙没有时间安装一个“维护模式”插件并设置它的选项,可以简单地使用下面的代码给除了管理员以外的用户显示wp_die()错误:

<?php
add_action( 'get_header', 'get_header_example' );
function get_header_example() {
    if ( ! current_user_can( 'activate_plugins' ) ) {
        wp_die( 'The website will be back soon.' );
    }
}
// Example Source: http://wp-snippets.com/articles/7-code-snippets-you-should-use-on-every-site/
?>

只有管理员(和超级管理员)拥有’activate_plugins’的权限,网站会对管理员以外的用户关闭。

修改登录页面的<head>标签

login_head这个动作可以帮我们控制登录页面的<head>标签

移除有错误验证时的晃动效果

如果你不喜欢在用户提交错误的登录信息时的“晃动”效果,你可以使用下面的代码移除它:

<?php
add_action( 'login_head', 'login_head_example' );
function login_head_example() {
    remove_action( 'login_head', 'wp_shake_js', 12 );
}
// Example Source: http://wordpress.org/support/topic/plugin-simplemodal-login-remove-shake-effect
?>

虽然我喜欢这样的效果。

利用仪表盘的底部

在某些情况下,我们想要控制我们管理面板的底部——而不是每一个页面的底部,但是在</body>标签之前。admin_footer动作就是做这个的。

为文章状态添加样式

保持统一的颜色风格是WordPress的管理面板美观的一个原因,但是我认为使用颜色代码来使不同状态的文章有不同的颜色,这样的做法不会影响美观。

如果你喜欢我的这种做法,并且想要通过颜色来区分草稿、已发布文章、或其他状态的文章,那么就可以使用下面的代码:

<?php
add_action( 'admin_footer', 'admin_footer_example' );
function admin_footer_example() {
    echo '<style type="text/css">
    .status-draft   { background-color: #FCE3F2; }
    .status-pending { background-color: #87C5D6; }
    .status-future  { background-color: #C6EBF5; }
    .status-private { background-color: #F2D46F; }
    </style>';
}
// Example Source: http://wpsnipp.com/index.php/functions-php/change-admin-postpage-color-by-status-draft-pending-published-future-private/
?>

在登录页面添加脚本和样式

我们可以使用wp_enqueue_scripts向前台添加一些东西,并且我们可以使用admin_enqueue_scripts向后台添加东西。那么登陆页呢?你是不是已经猜到了:这次是login_enqueue_scripts 这个钩子!

修改登录表单上面的Logo

我喜欢WordPress的Logo,但我不认为每次用户登录到网站都应该这么显示。如果你的想法跟我一样,那么你可以利用下面这段很有用的代码把WordPress的Logo替换成自己想要的图片。

<?php
add_action( 'login_enqueue_scripts', 'login_enqueue_scripts_example' );
function login_enqueue_scripts_example() {
    echo '<style type="text/css">'
            . '#login h1 a {'
                . 'background-image: url(' . get_bloginfo( 'template_directory' ) . '/images/login-logo.png);'
                . 'padding-bottom: 30px;'
            . '}'
        . '</style>';
}
// Example Source: http://wpsnippy.com/add-custom-login-logo-in-your-wordpress-blog/
?>

把login-logo.png这个文件放到你的主题中的/images/目录里就可以了!

在用户列表中添加自定义列

你知道用户列表是在管理面板中的“所有用户”页面中吗?manage_users_custom_column这个动作允许我们在对应的过滤器的帮助下添加新的自定义列。

在一列中显示用户的注册日期

假设你需要看到你的用户的注册日期。你可通过查询数据库来获得该信息,或者你也可以使用这段代码在用户列表中添加一个扩展的列来显示:

<?php
add_action( 'manage_users_custom_column', 'manage_users_custom_column_example', 10, 3 );
add_filter( 'manage_users_columns', 'manage_users_columns_example' );
// create a new column named "Zip Code"
function manage_users_columns_example( $columns ) {
    $columns['user_registered'] = __( 'Registration Date', 'theme-name' );
    return $columns;
}
// fill the column cells with the registration dates
function manage_users_custom_column_example( $value, $column_name, $user_id ) {
    if ( 'user_registered' == $column_name ) {
        $userdata = get_userdata( $user_id );
        return $userdata->user_registered;
    }
}
// Example Source (Idea): http://tommcfarlin.com/add-custom-user-meta-during-registration/
?>

现在你可以知道你的用户更多的信息了。

利用插件激活机制

当需要知道一个插件是否已经在WordPress中被激活时你会怎么做?你可以使用activated_plugin这个钩子:这个动作会在插件激活时触发。

当有插件被激活时就给管理员发送一封邮件

假设你有很多客户网站(使用你的邮件地址安装的),并且你需要在客户安装并激活来一个新的插件时通知到你。

你可以使用下面这个函数并挂载到 activated_plugins 钩子就可以了:

<?php
add_action( 'activated_plugin', 'activated_plugin_example', 10, 2);
function activated_plugin_example( $plugin, $network_activation ) {
    $to         = get_option( 'admin_email' );
    $subject    = 'A plugin has been activated';
    $body       = "Hey,\n\nThe following plugin has just been activated:\n\n$plugin\n\nCheers!";
    wp_mail( $to, $subject, $body );
}
?>

操作管理界面配色方案选项

从WordPress的3.0版本开始,对管理面板有了“配色方案”这个功能,并且允许我们编辑,添加或者删除配色方案。admin_color_scheme_picker 为用户改变配色方案提供了可能。

移除“管理界面配色方案”选项

如果你想禁止用户更改管理界面配色方案的话(这么说吧,因为你有一个特殊的配色方案并且不希望你的用户把这个改回到默认的状态),那么使用下面的代码就可以移除这个选项:

<?php
if( is_admin() ) {
    remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
}
// Example Source: http://wpsnipp.com/index.php/functions-php/remove-admin-color-scheme-picker-from-profile/
?>

嘿,我们刚刚从一个动作钩子中移除了一个相同名字的函数。我知道,这个有点奇怪。

操作登出进程

用户会做登录,登出操作,当他们登出账号时,wp_logout动作就会被调用。

当用户登出后重定向到首页

从一个WordPress网站登出是有点奇怪:你会被重定向到登录页面,WordPress需要你重新登录。这里有个方案可以改变这种情况并且让用户登出后重定向到首页:

<?php
add_action( 'wp_logout', 'wp_logout_example' );
function wp_logout_example() {
    wp_redirect( home_url() );
    exit();
}
// Example Source: http://wpsnippy.com/auto-redirect-users-after-logout/
?>

现在每次用户退出后,他们将会看到首页而不是登录表单。

小结

我们刚刚结束了50个动作的最后一批,我们希望你喜欢并从中学习到了新的知识,我们将会有个快速回顾来看一下我们介绍过的内容并结束这个系列。

同时,我也想要听到你的想法。关于你对这些动作的想法?请在下面回帖。如果你喜欢这篇文章,不要忘记分享它!

原文出自:http://code.tutsplus.com/tutorials/fifty-actions-of-wordpress-50-examples-41-to-50–cms-21582