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