Cómo redirigir a no administradores a la página de inicio si intentan ver mysite.com/wp-admin/

12 mar 2013, 16:45:36
Vistas: 16.5K
Votos: 3

Quiero que todos mis usuarios (colaboradores y autores también) excepto el administrador sean redirigidos a la página de inicio si intentan ver mysite.com/wp-admin/. Los colaboradores y autores deben poder agregar y editar publicaciones como de costumbre, mientras que los demás deben ser redirigidos forzosamente... Ya he eliminado el enlace al panel de control... También he probado algunos plugins pero el que más se acerca (Remove Dashboard Access) redirige a la página principal pero impide que los colaboradores y autores puedan agregar, editar y eliminar publicaciones. ¡Gracias!

0
Todas las respuestas a la pregunta 5
1

He estado usando este código por un tiempo, creo que originalmente estaba en un plugin llamado wp block admin pero esto funciona. Solo tienes que cambiar la capacidad requerida para que haga lo que necesitas, mira esto

$required_capability = 'edit_others_posts';
$redirect_to = '';
function no_admin_init() {      
    // Necesitamos las variables de configuración dentro de la función
    global $required_capability, $redirect_to;      
    // ¿Es esta la interfaz de administración?
    if (
        // Buscar la presencia de /wp-admin/ en la URL
        stripos($_SERVER['REQUEST_URI'],'/wp-admin/') !== false
        &&
        // Permitir llamadas a async-upload.php
        stripos($_SERVER['REQUEST_URI'],'async-upload.php') == false
        &&
        // Permitir llamadas a admin-ajax.php
        stripos($_SERVER['REQUEST_URI'],'admin-ajax.php') == false
    ) {         
        // ¿El usuario actual no tiene la capacidad requerida?
        if (!current_user_can($required_capability)) {              
            if ($redirect_to == '') { $redirect_to = get_option('home'); }              
            // Enviar una redirección temporal
            wp_redirect($redirect_to,302);              
        }           
    }       
}
// Añadir la acción con máxima prioridad
add_action('init','no_admin_init',0);
12 mar 2013 22:57:57
Comentarios

No es la forma en que se supone que debe hacerse, pero +1 por considerar el archivo admin-ajax.php.

kaiser kaiser
13 mar 2013 13:00:13
1

Una adición importante: SIEMPRE verifica si hay un usuario conectado, de lo contrario podrías evitar que elementos protegidos se muestren en la pantalla de inicio de sesión:

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

¡Muchas gracias por ofrecer esta solución! :-)

11 mar 2016 19:01:43
Comentarios

¡Respuesta perfecta!

WhiteHorse WhiteHorse
5 dic 2018 15:33:16
3

Solo hay dos cosas que necesitas verificar:

  • Si el usuario está en la interfaz de administración
  • Si tiene la capacidad o no

Mientras estemos usando el hook template_redirect no tenemos que verificar las páginas de inicio de sesión/registro/contraseña ya que la redirección ocurrirá de forma invisible para el usuario.

Aquí está la idea encapsulada en un pequeño plugin (mu-plugin).

<?php
/**
 * Plugin Name: (#90535) Redirigir usuarios no administradores a la página de "Inicio".
 * Description: Verifica si estamos en la interfaz de administración y si el usuario tiene la capacidad exclusiva de administrador 'manage_options'
 * 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
Comentarios

No estoy seguro exactamente de lo que buscaba OP, pero ahora me pregunto ¿cuándo is_admin() es verdadero dentro de template_redirect? (Quizás es demasiado temprano en la mañana para que yo lo vea ;-)

birgire birgire
9 may 2017 11:56:07

@birgire No tengo idea… esta respuesta tiene 4 años :)

kaiser kaiser
9 may 2017 15:10:00

jeje usualmente no recuerdo lo que cené hace 2 días, así que lo entiendo totalmente ;-)

birgire birgire
9 may 2017 15:16:38
1

Desafortunadamente, ninguno de los códigos anteriores funcionó para mí, ya que simplemente redirigían a los no administradores a la página de inicio, incluso si quería que los autores y colaboradores pudieran agregar, editar y eliminar sus publicaciones...

Terminé eliminando los cuadros en el panel de control y resolví (parcialmente) mi problema.

Agregué esto en 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
Comentarios

Oh, parece que ambos entendimos mal tu pregunta... Toma nuestras respuestas, modifícalas y luego intenta de nuevo. O haz tu pregunta más clara con A) a dónde deberían redirigirse el login/registro/contraseña y B) qué página exacta debería poder acceder el usuario y a cuál no.

kaiser kaiser
13 mar 2013 13:02:15
0

Sé que esta sigue siendo una pregunta antigua, pero puedes echarle un vistazo.

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

Esta comprobación es MUY IMPORTANTE "!defined( 'DOING_AJAX' )" cuando utilizas llamadas AJAX de administración en el frontend.

10 mar 2015 08:17:54