只是重新审视了这个答案,因为它在很长一段时间内没有更新。年份是2021。
接受的答案是检查当前页面是否为wp-login.php
页OR 管理页面WHILE 使用admin_init
胡克,这是胡说八道。
admin_init
初始化管理屏幕或脚本时激发。确实如此NOT 只需在面向用户的管理屏幕上运行即可。它继续运行admin-ajax.php
和admin-post.php
也
在任何情况下,它都不会在wp-login.php
照现在的样子NOT 管理屏幕。虽然它确实会在ajax请求时触发,因此应该处理这种情况。wp_doing_ajax()
确定当前请求是否为WordPress Ajax请求。
在下面的示例中,我使用delete_posts
允许的用户功能admin
, editor
和author
访问Wordpress后端。请参阅Capability vs. Role Table 更具限制性的方法。
作为提醒,这里有默认的Wordpress角色(Summary of Roles):
超级管理员→
管理→
编辑→
著者→
贡献者→
订阅人
在单站点WordPress安装中,管理员实际上是超级管理员。
我选择使用wp_die()
而不是盲目地重定向用户。wp_die()
提供某种类型的用户登录,因为它会终止Wordpress的执行并显示带有错误消息的HTML页面。同样的方法也可以将用户重定向到404页面。任何能够解释这种情况的东西都比盲目的主页重定向要好。
add_action( \'admin_init\', \'restrict_wpadmin_access\' );
if ( ! function_exists( \'restrict_wpadmin_access\' ) ) {
function restrict_wpadmin_access() {
if ( wp_doing_ajax() || current_user_can( \'delete_posts\' ) ) {
return;
} else {
header( \'Refresh: 2; \' . esc_url( home_url() ) );
$args = array(
\'back_link\' => true,
);
wp_die( \'Restricted access.\', \'Error\', $args );
};
};
};
阻止默认重定向到
wp-admin.php
登录后,我使用
login_redirect
钩子过滤器,用于过滤登录重定向URL。我正在使用将他们重定向到他们自己的个人资料页
get_author_posts_url()
, 但是你可以很容易地重定向到你想要的任何页面。您还可以根据用户角色有条件地重定向(例如:admin到admin页,rest到profile),所有内容都在CODEX页示例部分进行了解释。
add_filter( \'login_redirect\', \'redirect_user_to_profile_on_login\', 10, 3 );
if ( ! function_exists( \'redirect_user_to_profile_on_login\' ) ) {
function redirect_user_to_profile_on_login( $redirect_to, $requested_redirect_to, $user ) {
if ( $user && is_object( $user ) && is_a( $user, \'WP_User\' ) ) {
$redirect_to = esc_url( get_author_posts_url( $user->ID ) );
};
return $redirect_to;
};
};