Come reindirizzare gli utenti non amministratori alla homepage se cercano di accedere a mysite.com/wp-admin/?

12 mar 2013, 16:45:36
Visualizzazioni: 16.5K
Voti: 3

Voglio che tutti i miei utenti (compresi collaboratori e autori) eccetto l'amministratore vengano reindirizzati alla homepage se cercano di accedere a mysite.com/wp-admin/. Collaboratori e autori devono comunque poter aggiungere e modificare i post come al solito, mentre tutti gli altri devono essere forzatamente reindirizzati... Ho già rimosso il link alla dashboard... Ho anche provato alcuni plugin ma quello che si avvicina di più (Remove Dashboard Access) reindirizza alla pagina principale ma impedisce ai collaboratori e autori di aggiungere, modificare e cancellare i post. Grazie!

0
Tutte le risposte alla domanda 5
1

Utilizzo questo codice da un po' di tempo, penso che originariamente provenisse da un plugin chiamato wp block admin, ma questo funziona. Devi solo modificare la capacità richiesta in modo che faccia ciò di cui hai bisogno, guarda questo

$required_capability = 'edit_others_posts';
$redirect_to = '';
function no_admin_init() {      
    // Abbiamo bisogno delle variabili di configurazione all'interno della funzione
    global $required_capability, $redirect_to;      
    // È l'interfaccia di amministrazione?
    if (
        // Cerca la presenza di /wp-admin/ nell'URL
        stripos($_SERVER['REQUEST_URI'],'/wp-admin/') !== false
        &&
        // Permette le chiamate a async-upload.php
        stripos($_SERVER['REQUEST_URI'],'async-upload.php') == false
        &&
        // Permette le chiamate a admin-ajax.php
        stripos($_SERVER['REQUEST_URI'],'admin-ajax.php') == false
    ) {         
        // L'utente corrente non ha il livello di capacità richiesto?
        if (!current_user_can($required_capability)) {              
            if ($redirect_to == '') { $redirect_to = get_option('home'); }              
            // Invia un reindirizzamento temporaneo
            wp_redirect($redirect_to,302);              
        }           
    }       
}
// Aggiunge l'azione con priorità massima
add_action('init','no_admin_init',0);
12 mar 2013 22:57:57
Commenti

Non è il modo in cui si dovrebbe fare, ma +1 per aver considerato il file admin-ajax.php.

kaiser kaiser
13 mar 2013 13:00:13
1

Un'aggiunta: VERIFICA SEMPRE se c'è un utente connesso altrimenti impedirai la visualizzazione di elementi protetti nella schermata di login:

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' );

Grazie mille per aver offerto questa soluzione :-)

11 mar 2016 19:01:43
Commenti

Risposta Perfetta!

WhiteHorse WhiteHorse
5 dic 2018 15:33:16
3

Ci sono solo due cose che devi verificare:

  • Se l'utente si trova nell'interfaccia di amministrazione
  • Se ha o meno le capacità necessarie

Finché utilizziamo l'hook template_redirect non dobbiamo controllare le pagine di login/registrazione/password perché il reindirizzamento avverrà in modo invisibile per l'utente.

Ecco l'idea racchiusa in un piccolo plugin (mu-plugin).

<?php
/**
 * Plugin Name: (#90535) Reindirizza gli utenti non amministratori alla pagina "Home".
 * Description: Verifica se siamo nell'interfaccia di amministrazione e se l'utente ha la capacità 'manage_options' riservata agli amministratori
 * 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 ) );
}
12 mar 2013 23:33:28
Commenti

Non sono sicuro di cosa stesse cercando esattamente OP, ma ora mi chiedo quando is_admin() è vero all'interno di template_redirect? (Forse è semplicemente troppo presto al mattino per me per vederlo ;-)

birgire birgire
9 mag 2017 11:56:07

@birgire Non ne ho idea… questa risposta ha 4 anni :)

kaiser kaiser
9 mag 2017 15:10:00

hehe di solito non ricordo cosa ho mangiato a cena 2 giorni fa, quindi capisco perfettamente ;-)

birgire birgire
9 mag 2017 15:16:38
1

Sfortunatamente nessuno dei codici sopra ha funzionato per me, in quanto reindirizzavano semplicemente i non amministratori alla homepage anche se volevo che autori e collaboratori potessero aggiungere/modificare ed eliminare i loro articoli...

Alla fine ho rimosso i box nella dashboard e ho risolto (parzialmente) il mio problema.

Ho aggiunto questo in 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');
13 mar 2013 12:47:59
Commenti

Oh, sembra che entrambi abbiamo frainteso la tua domanda... Prendi le nostre risposte, modificale e poi riprova. Oppure rendi la tua domanda più chiara specificando A) dove dovrebbero reindirizzare login/registrazione/password e B) a quale pagina esatta l'utente dovrebbe avere accesso e a quale no.

kaiser kaiser
13 mar 2013 13:02:15
0

So che questa è ancora una vecchia domanda ma puoi dare un'occhiata.

function redirect_non_admin_user(){
    // Reindirizza gli utenti non amministratori dalla dashboard
    if ( !defined( 'DOING_AJAX' ) && !current_user_can('administrator') ){
        wp_redirect( site_url() );  exit;
    } 
}

// Aggiunge l'azione al hook admin_init
add_action( 'admin_init', 'redirect_non_admin_user' );

Questo controllo è MOLTO IMPORTANTE "!defined( 'DOING_AJAX' )" quando usi chiamate AJAX admin nel frontend.

10 mar 2015 08:17:54