web-dev-qa-db-fra.com

Éditeur de rôles/champs personnalisés avancés - Comment masquer ACF pour certains utilisateurs?

J'utilise l'éditeur de rôle d'utilisateur pour spécifier des rôles d'utilisateur personnalisés. J'utilise aussi le plugin Advanced Custom Fields.

Je voudrais pouvoir masquer les champs personnalisés avancés pour certains utilisateurs; Cependant, la seule façon de procéder dans l'éditeur de rôle d'utilisateur consiste à décocher la case "Gérer les options". Le problème, c’est que cela supprime l’affichage d’autres plug-ins que j’aimerais en fait montrer à ces utilisateurs.

Y a-t-il un peu de code manuel que je peux placer dans mon fichier functions.php qui ne supprimera que les champs personnalisés avancés pour certains rôles d'utilisateur? Juste ce plugin.

1
Matt

L'action admin_menu masquera le menu ACF, dans cet exemple pour les non-administrateurs.

Et admin_head bloquera l'accès si l'URL est accédé directement.
Exemple: http://example.com/wp-admin/edit.php?post_type=acf et http://example.com/wp-admin/edit.php?post_type=acf&page=acf-settings

add_action( 'admin_menu', 'wpse_59032_remove_acf_menu', 9999 );
add_action( 'admin_head-edit.php', 'wpse_59032_block_acf_screens' );
add_action( 'admin_head-custom-fields_page_acf-settings', 'wpse_59032_block_acf_screens' );

function wpse_59032_remove_acf_menu() 
{
    /* if not our allowed users, hide menu */
    if ( !current_user_can('delete_plugins') ) {
        remove_menu_page('edit.php?post_type=acf');
    }
}

function wpse_59032_block_acf_screens()
{   
    global $current_screen;

    /* not our screen, do nothing */
    if( 'edit-acf' != $current_screen->id && 'custom-fields_page_acf-settings' != $current_screen->id )
        return;

    /* if not our allowed users, block access */
    if ( !current_user_can('delete_plugins') ) {
        wp_die('message');
    }

}
4
brasofilo