J'ai créé des types de publication personnalisés, mais je voudrais les masquer dans le tableau de bord des abonnés, des auteurs et des rédacteurs (pour l’essentiel, autoriser uniquement les administrateurs à y accéder).
Puis-je faire cela sans installer de plugin?
Je suis sûr que vous pouvez spécifier certaines fonctionnalités lors de l’enregistrement du type de message lui-même. Cependant, voici une version plus robuste qui peut être largement utilisée dans le tableau de bord de l’administration.
/**
* Hide dashboard administrator menus from disallowed user roles.
*
* @author Michael Ecklund
* @author_url https://www.michaelbrentecklund.com/
*
* @return void
*/
function mbe_hide_menus() {
global $current_user, $menu;
# Set list of disallowed user roles.
$disallowed_roles = array( 'subscriber', 'author', 'editor' );
$disallowed = false;
# Check current user role against all disallowed roles.
foreach ( $disallowed_roles as $disallowed_role ) {
# Current user role must not be disallowed.
if ( in_array( $disallowed_role, $current_user->roles ) ) {
$disallowed = true;// User role disallowed.
break;
}
}
# User passed the check. Bail before hiding the menu.
if ( $disallowed === false ) {
return;
}
# Set list of disallowed dashboard administration menus.
$restricted = array(
__( 'INSERT MENU NAME HERE' )// Text as it appears in the admin menu.
);
# Attempt to hide admin menus.
foreach ( $menu as $index => $menu_data ) {
if ( in_array( $menu_data[0], $restricted ) ) {
unset( $menu[ $index ] );
}
}
}
Pour activer la fonction, vous devez ajouter l'action.
add_action('admin_menu', 'mbe_hide_menus', 101);
Le code ci-dessus ne fait que masquer l'affichage des menus de l'administrateur à l'utilisateur. Ils peuvent toujours accéder directement aux pages s’ils connaissent les bonnes URL.
Vous pouvez utiliser ceci pour empêcher des utilisateurs non privilégiés d'accéder à des pages d'administration spécifiques.
/**
* Restrict admin pages from unprivileged users.
*
* @author Michael Ecklund
* @author_url https://www.michaelbrentecklund.com/
*
* @return void
*/
function mbe_disallow_admin_pages() {
global $pagenow;
# Skip checking administrative users.
if ( current_user_can( 'administrator' ) ) {
return;
}
# Set denyable & hookable list of admin pages.
$page_slugs = apply_filters( 'mbe_disallowed_admin_pages', array(
'admin.php' => 'jetpack',
'options-general.php' => ''
) );
# Page parameter isn't always present.
if ( ! isset( $_GET['page'] ) ) {
$page = '';
}
# Check current admin page against denied admin page list.
if ( array_key_exists( $pagenow, $page_slugs ) && in_array( $page, $page_slugs ) ) {
wp_die( 'You do not have sufficient permissions to access this page.' );
}
}
Pour activer la fonction, vous devez ajouter l'action.
add_action( 'admin_init', 'mbe_disallow_admin_pages' );