Restrict access to admin but allow admin_post hook

admin2025-06-06  3

I'm using this hook to allow only admin roles access dashboard

add_action( 'admin_init', function() {
    if ( defined('DOING_AJAX') && DOING_AJAX ) {
        return;
    }

    if ( !current_user_can('manage_options') ) {
        wp_redirect( home_url('/meu-perfil') );
        exit();
    }
});

Now I need to run a function when a form is submitted on front end, like so:

function editUser() {
    error_log('message');
}
add_action( 'admin_post_nopriv_add_foobar', 'editUser' );
add_action( 'admin_post_add_foobar', 'editUser' );

But the first hook is blocking the second one.

I'm using this hook to allow only admin roles access dashboard

add_action( 'admin_init', function() {
    if ( defined('DOING_AJAX') && DOING_AJAX ) {
        return;
    }

    if ( !current_user_can('manage_options') ) {
        wp_redirect( home_url('/meu-perfil') );
        exit();
    }
});

Now I need to run a function when a form is submitted on front end, like so:

function editUser() {
    error_log('message');
}
add_action( 'admin_post_nopriv_add_foobar', 'editUser' );
add_action( 'admin_post_add_foobar', 'editUser' );

But the first hook is blocking the second one.

Share Improve this question edited Nov 7, 2018 at 20:46 Krzysiek Dróżdż 25.6k9 gold badges53 silver badges74 bronze badges asked Nov 7, 2018 at 11:41 MarceloMarcelo 473 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 3

All you need to do is to modify your method of restricting users.

add_action( 'admin_init', function() {
    if ( (defined('DOING_AJAX') && DOING_AJAX) || ( strpos($_SERVER['SCRIPT_NAME'], 'admin-post.php') ) ) {
        return;
    }

    if ( !current_user_can('manage_options') ) {
        wp_redirect( home_url('/meu-perfil') );
        exit();
    }
}
转载请注明原文地址:http://conceptsofalgorithm.com/Algorithm/1749199062a317193.html

最新回复(0)