Cómo redirigir a no administradores a la página de inicio si intentan ver mysite.com/wp-admin/
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!

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

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! :-)

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

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

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

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.

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.
