限制WordPress后端访问,没有冲突的表单



我在WordPress中有一个标准表单,我正在努力限制对WordPress后端和正确工作表单的访问,因为表单是在wp-admin上处理的,如果这受到限制,则不处理表单。

<form action="<?php echo admin_url('admin-post.php'); ?>" method="post">
...
</form>

限制后端访问:

// Restrict users to enter backend
add_action('init', 'restrict_backend_access');
function restrict_backend_access() {
if (is_admin() && current_user_can('subscriber') && !(defined('DOING_AJAX') && DOING_AJAX)){
wp_redirect( '/dashboard/' );
exit;
}
}

我错过了什么吗?我知道这是可能的,因为我建立了很多次,但这一次有些不同,我不知道为什么。

谢谢!

正确代码如下:

add_action( 'init', 'restrict_backend_access' );
function restrict_backend_access() {
if( is_admin() && ! current_user_can( 'subscriber' ) && !( defined( ‘DOING_AJAX’ ) && DOING_AJAX ) ) {
wp_redirect( home_url() );  
exit;
}
}

您可以根据需要设置重定向。例如:replace

wp_redirect( home_url() ) 

wp_redirect( '/dashboard/' );

您可以在表单中添加一个隐藏字段

<form action="<?php echo admin_url('admin-post.php'); ?>" method="post">
...
<input type="hidden" name="admin_post_request" value="1" />
</form>

然后使用它绕过重定向

add_action( 'init', 'restrict_backend_access' );
function restrict_backend_access() {
if( is_admin() && ! current_user_can( 'subscriber' ) && !( defined( ‘DOING_AJAX’ ) && DOING_AJAX && !isset( $_GET['admin_post_request'] ) ) ) {
wp_redirect( home_url() );  
exit;
}
}

最新更新