Remove access to a particular feature in Wordpress

Asked

Viewed 853 times

1

I am trying to limit access in a finished wordpress feature for users in the administrative area. I’ve found several ways to remove the "Posts" menu from the panel menu but I haven’t found a solution to take the access if the user enters directly (for example by accessing domain.com.br/wp-admin/Edit.php)

// remove o menu
remove_menu_page('edit.php');

How to limit access to the resource if the user enters directly without using plugin?

1 answer

2

In fact, you need a plugin, only you’ll write it yourself ;)

I posted the following plugin originally in question Users Role and Access, translated and adapted here (missing the example load-$current_page). Remove the Hooks and functions you don’t need, and adapt user detection to your needs.

<?php
/*
 * Plugin Name: Técnicas de bloqueio de acesso administrativo a determinados usuários. 
 * Description: Publicado originalmente em [wordpress.se Q#57206](https://wordpress.stackexchange.com/a/72907/12615)
 * Version: 0.3
 * Author: brasofilo 
 * Plugin URI: /a/9728/201
 */

/* 
 * Quando um usuário visita uma página à qual não tem acesso,
 * i.e.: http:/example.com/wp-admin/plugins.php,
 * WordPress mostra uma mensagem de erro padrão.
 * Este hook vai redirigir o usuário em vez de mostrar essa mensagem
 */
add_action( 'admin_page_access_denied', 'access_denied_wpse_57206' );
function access_denied_wpse_57206()
{
    wp_redirect(home_url());
    exit();
}

/*
 * Redirecionar usuário sem capacidade de 'edit_posts' se tentarem visitar
 * a página de Perfil que, em teoria, teriam capacidade de visualizar
 * http:/example.com/wp-admin/profile.php
 * Esta redireção leva para o Escritório (wp-admin/index.php)
 */
add_action( 'load-profile.php', 'load_profile_sopt_9725' );
function load_profile_sopt_9725()
{
    if( !current_user_can( 'edit_posts' ) ) 
    {
        wp_redirect( admin_url() );
        exit();
    }
}

/*
 * Redirecionar usuário sem capacidade de 'edit_posts' se tentarem visitar
 * qualquer página administrativa que, em teoria, teriam capacidade de visualizar
 */
add_action( 'admin_init', 'admin_init_wpse_57206' );
function admin_init_wpse_57206()
{
    if( !current_user_can( 'edit_posts' ) ) 
    {
        wp_redirect( home_url() );
        exit();
    }
}

/*
 * Redirecionar usuário com as funções 'subscriber' e 'pending'
 */
add_filter( 'login_redirect', 'login_redirect_wpse_57206' );
function login_redirect_wpse_57206( $url )
{
    global $user;
    if ( in_array( $user->roles[0], array( 'pending', 'subscriber' ) ) ) 
    {
        $url = home_url();
    }
    return $url;
}

/*
 * Esconder a barra administrativa de usuários sem capacidade 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;
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.