web-dev-qa-db-fra.com

Réorienter les utilisateurs en dehors de l'administrateur casse ajax

J'ai essayé de faire une simple redirection pour certains utilisateurs. Je ne veux pas accéder à wp-admin /, alors j'ai fait ce code:

function no_admin_access() {
    if ( !current_user_can( 'delete_posts' ) ) {
        wp_redirect( site_url( '/' ) ); exit;
    }
}
add_action('admin_init', 'no_admin_access');

Mais quand j'essaie ensuite de faire une requête ajax avec ces utilisateurs, le lien est également redirigé, de sorte que je n'arrive jamais à admin-ajax.php.

Quelqu'un qui a un bon travail pour ça?

Merci.

Code AJAX

$.ajax({
    type: 'POST',
    url: MyAjax.ajaxurl,
    data: {
        action: 'mux_ajax_delete_pix',
        pid: $this.attr('data-id')
    },
    success: function(){
        $this.parent().fadeOut();
    }
});
2
Kristian Primdal

Vous pouvez et vérifier la constante DOING_AJAX qui est définie sur un Ajax dans votre contrôle conditionnel:

function no_admin_access()
{
    if (
        // Don't do this for AJAX calls
        ! defined( 'DOING_AJAX' ) 
        // Capability check
        && ! current_user_can( 'delete_posts' ) 
        )
    {
        // Redirect to home/front page
        wp_redirect( site_url( '/' ) );
        // Never ever(!) forget to exit(); or die(); after a redirect
        exit;
    }
}
add_action( 'admin_init', 'no_admin_access' );
2
Bainternet

j'utilise la fonction ci-dessous et cela fonctionne très bien pour moi

function remove_admin_access_for_non_editor() { if ( is_admin() && ! current_user_can( 'edit_posts' ) && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) { wp_redirect( home_url() ); exit; } } add_action( 'init', 'remove_admin_access_for_non_editor' );

0
Abouasy