web-dev-qa-db-fra.com

Comment rediriger les non-administrateurs vers la page d'accueil si vous essayez de visualiser mysite.com/wp-admin/?

Je souhaite que tous mes utilisateurs (contributeurs et auteurs également), mais que l'administrateur soit redirigé vers la page d'accueil s'ils tentent d'afficher mysite.com/wp-admin/. Les contributeurs et les auteurs doivent être capables d’ajouter et d’éditer des publications comme d’habitude, ainsi que d’autres qu’ils doivent être redirigés de manière redirigée ... J'ai déjà supprimé le lien vers le tableau de bord ... J'ai aussi essayé des plugins mais celui qui se rapproche (Remove Dashboard Access) redirige vers la page principale mais empêche les contributeurs et les auteurs d'ajouter, de modifier et de supprimer des publications. Merci!

2
user27309

Malheureusement, aucun des codes ci-dessus n'a fonctionné pour moi, car ils ont simplement redirigé non admin vers la page d'accueil, même si je voulais que les auteurs et les contributeurs puissent ajouter/modifier et supprimer leurs messages ... J'ai fini de supprimer les cases du tableau de bord et je résolu (partiellement) mon problème.

J'ai ajouté ceci dans functions.php

function disable_default_dashboard_widgets() {

    remove_meta_box('dashboard_right_now', 'dashboard', 'core');
    remove_meta_box('dashboard_recent_comments', 'dashboard', 'core');
    remove_meta_box('dashboard_incoming_links', 'dashboard', 'core');
    remove_meta_box('dashboard_plugins', 'dashboard', 'core');

    remove_meta_box('dashboard_quick_press', 'dashboard', 'core');
    remove_meta_box('dashboard_recent_drafts', 'dashboard', 'core');
    remove_meta_box('dashboard_primary', 'dashboard', 'core');
    remove_meta_box('dashboard_secondary', 'dashboard', 'core');
}
add_action('admin_menu', 'disable_default_dashboard_widgets');
0
user27309

J'utilise ce code depuis un certain temps, je pense que c'était initialement sur un plugin appelé wp block admin, mais cela fonctionne. Il vous suffit de modifier la compatibilité requise pour qu'elle réponde aux besoins, regardez this

$required_capability = 'edit_others_posts';
$redirect_to = '';
function no_admin_init() {      
    // We need the config vars inside the function
    global $required_capability, $redirect_to;      
    // Is this the admin interface?
    if (
        // Look for the presence of /wp-admin/ in the url
        stripos($_SERVER['REQUEST_URI'],'/wp-admin/') !== false
        &&
        // Allow calls to async-upload.php
        stripos($_SERVER['REQUEST_URI'],'async-upload.php') == false
        &&
        // Allow calls to admin-ajax.php
        stripos($_SERVER['REQUEST_URI'],'admin-ajax.php') == false
    ) {         
        // Does the current user fail the required capability level?
        if (!current_user_can($required_capability)) {              
            if ($redirect_to == '') { $redirect_to = get_option('home'); }              
            // Send a temporary redirect
            wp_redirect($redirect_to,302);              
        }           
    }       
}
// Add the action with maximum priority
add_action('init','no_admin_init',0);
5
Poxtron

Un ajout: vérifiez TOUJOURS s'il y a un utilisateur connecté, sinon vous empêcherez l'affichage des éléments sécurisés sur l'écran de connexion:

function redirect_non_admin_user(){
    if ( is_user_logged_in() ) {
        if ( !defined( 'DOING_AJAX' ) && !current_user_can('administrator') ){
            wp_redirect( site_url() );  exit;
        }
    }
}
add_action( 'admin_init', 'redirect_non_admin_user' );

Merci beaucoup d'avoir offert cette solution :-)

1
Aous

Je sais que c'est encore une vieille question, mais vous pouvez y jeter un coup d'œil.

function redirect_non_admin_user(){
    if ( !defined( 'DOING_AJAX' ) && !current_user_can('administrator') ){
        wp_redirect( site_url() );  exit;
    } 
}


add_action( 'admin_init', 'redirect_non_admin_user' );

Cette vérification est très IMPORTANTE "! Defini ('DOING_AJAX')" lorsque vous utilisez un appel admin ajax dans une interface frontale.

0
Rocker Maruf

Il n'y a que deux choses à vérifier:

  • Si l'utilisateur est dans l'interface d'administration
  • S'il a la capacité ou non

Tant que nous utilisons le hook template_redirect, nous n'avons pas à vérifier les pages de connexion/enregistrement/mot de passe car la redirection se fera de manière invisible pour l'utilisateur.

Voici l'idée présentée sous forme d'un petit plugin (mu-).

<?php
/**
 * Plugin Name: (#90535) Redirect Non-Admin users to the "Home"-page.
 * Description: Checks if we're in the admin UI and if the user has the admin only 'manage_options' capability
 * Version:     2013.03.12
 * Author:      Franz Josef Kaiser
 */
add_action( 'template_redirect', 'wpse90535_admin_denied' );
function wpse90535_admin_denied()
{
    is_admin()
    && ! current_user_can( 'manage_options' )
        and exit( wp_redirect( home_url(), 302 ) );
}
0
kaiser