我在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;
}
}