カスタム投稿タイプをいくつか作成しましたが、購読者、作成者、および編集者に対してダッシュボードでそれらを非表示にしたい(基本的には管理者にアクセスを許可するだけにします)。
プラグインをインストールせずにこれを実行できますか?
Post Type自体を登録しながら、いくつかの機能を指定できると確信しています。ただし、これは管理ダッシュボードで広く使用できる、より堅牢なバージョンです。
/**
* 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 ] );
}
}
}
機能を起動するには、アクションを追加する必要があります。
add_action('admin_menu', 'mbe_hide_menus', 101);
上記のコードは、ユーザーに表示される管理者メニューフォームを非表示にすることに限ります。正しいURLを知っていれば、彼らはまだ直接ページにアクセスできます。
これを使用して、特権のないユーザーによる特定の管理ページへのアクセスを拒否することができます。
/**
* 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.' );
}
}
機能を起動するには、アクションを追加する必要があります。
add_action( 'admin_init', 'mbe_disallow_admin_pages' );