Verilen cevapların bazıları çoğu durumda iyi olabilir, ancak bunların hiçbirinin tam olarak ne istediğini garanti etmediğini düşünüyorum, çünkü cevapların hiçbiri kullanıcı rollerini kontrol etmiyor, yetenekleri ve yetenekleri kontrol edebiliyor ve form rolleri atanabiliyor. Bu nedenle, kesin bir cevap vermek için, kullanıcı rolleri yetenekler değil kontrol edilmelidir:
add_action( 'admin_init', 'allow_admin_area_to_admins_only');
function allow_admin_area_to_admins_only() {
if( defined('DOING_AJAX') && DOING_AJAX ) {
//Allow ajax calls
return;
}
$user = wp_get_current_user();
if( empty( $user ) || !in_array( "administrator", (array) $user->roles ) ) {
//Redirect to main page if no user or if the user has no "administrator" role assigned
wp_redirect( get_site_url( ) );
exit();
}
}
Kullanıcının "manage_options" özelliğine sahip olup olmadığını kontrol etmek isterseniz, bunu yapabilirsiniz. Aslında, çoğu durumda en iyi seçenektir. Bu özellik varsayılan olarak yönetici kullanıcılarıyla ilişkilendirilmiş olsa da, yönetici yönetici rolünden kaldırılabilir veya diğer kullanıcı rollerine atanabilir. Bu nedenle, çoğu durumda, kullanıcının neler yapabileceğini veya yapamayacağını kontrol etmek, kullanıcı rolünü kontrol etmekten daha iyidir. Bu nedenle, çoğu durumda yetenekleri kontrol etmek seçilen yol olmalıdır, ancak bu kavramı netleştiriyor ve durumunuz ve amacınız için en iyi seçeneği seçiyorsunuz:
add_action( 'admin_init', 'admin_area_for_manage_options_only');
function admin_area_for_manage_options_only() {
if( defined('DOING_AJAX') && DOING_AJAX ) {
//Allow ajax calls
return;
}
if( ! current_user_can( "manage_options" ) ) {
//Redirect to main page if the user has no "manage_options" capability
wp_redirect( get_site_url( ) );
exit();
}
}