Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
admin-block.md

#Bloquear Acceso Administrativo para Ciertos Roles

Basado en esta WordPress Answer
<?php
/**
 * Plugin Name: Bloquear Acceso Administrativo para Ciertos Roles
 * Version: 0.2
 * Author: Rodolfo Buaiz 
 * Plugin URI: http://wordpress.stackexchange.com/q/57206/12615
 */

/**
 * Redirecciona usuarios registrados para la página frontal
 * si intentan acceder a una area restringida
 * p.ej.: http:/example.com/wp-admin/plugins.php
 * 
 * Por defecto, WP muestra un mensaje:
 * "No tienes permiso para acceder a esta página."
 */
add_action( 'admin_page_access_denied', 'access_denied_wpse_57206' );
function access_denied_wpse_57206()
{
    wp_redirect(home_url());
    exit();
}

/**
 * Redirecciona usuarios con la capacidad 'edit_posts' 
 * si intentan acceder a una página que tendrían derecho
 * p.ej.: http:/example.com/wp-admin/profile.php
 */
add_action( 'admin_init', 'admin_init_wpse_57206' );
function admin_init_wpse_57206()
{
    if( current_user_can( 'edit_posts' ) ) 
        return;

    wp_redirect( home_url() );
    exit();
}

/**
 * Redirecciona usuarios con roles 'pending' y 'subscriber' para la página frontal
 */
add_filter( 'login_redirect', 'login_redirect_wpse_57206' );
function login_redirect_wpse_57206( $url )
{
    global $user;

    if ( isset( $user->roles ) )
	{
		$result = array_intersect( $user->roles, array( 'author', 'subscriber' ) );
		if( !empty( $result ) )
	        $url = home_url();
	}

    return $url;
}

/**
 * Esconde la barra administrativa para usuarios sin capacidad de 'edit_posts'
 */
add_filter( 'show_admin_bar', 'hide_admin_bar_wpse_51831' );
function hide_admin_bar_wpse_51831( $bool )
{
    if( !current_user_can( 'edit_posts' ) )
        $bool = false;

    return $bool;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment