Как перенаправить не администраторов на домашнюю страницу, если вы пытаетесь просмотреть mysite.com/wp-admin /?
Я хочу, чтобы все мои пользователи (участники и авторы тоже), но администратор, были перенаправлены на домашнюю страницу, если они попытаются просмотреть mysite.com/wp-admin /. Участники и авторы должны иметь возможность добавлять и редактировать сообщения, как обычно, наряду с другими, которые они должны быть перенаправлены... Я уже удалил ссылку на панель мониторинга... Я также пробовал некоторые плагины, но тот, который становится ближе (Удаляет доступ к панели мониторинга), перенаправляет на главную страницу, но не позволяет участникам и авторам от добавления, редактирования и удаления сообщений. Спасибо!
5 answers
Я использую этот код некоторое время, я думаю, что он изначально был в плагине под названием wp block admin, но это работает. Вам просто нужно изменить требуемую совместимость, чтобы она делала то, что вам нужно, посмотрите на это
$required_capability = 'edit_others_posts';
$redirect_to = '';
function no_admin_init() {
// We need the config vars inside the function
global $required_capability, $redirect_to;
// Is this the admin interface?
if (
// Look for the presence of /wp-admin/ in the url
stripos($_SERVER['REQUEST_URI'],'/wp-admin/') !== false
&&
// Allow calls to async-upload.php
stripos($_SERVER['REQUEST_URI'],'async-upload.php') == false
&&
// Allow calls to admin-ajax.php
stripos($_SERVER['REQUEST_URI'],'admin-ajax.php') == false
) {
// Does the current user fail the required capability level?
if (!current_user_can($required_capability)) {
if ($redirect_to == '') { $redirect_to = get_option('home'); }
// Send a temporary redirect
wp_redirect($redirect_to,302);
}
}
}
// Add the action with maximum priority
add_action('init','no_admin_init',0);
Одно дополнение: ВСЕГДА проверяйте, есть ли вошедший в систему пользователь, иначе вы запретите отображение защищенных элементов на экране входа в систему:
function redirect_non_admin_user(){
if ( is_user_logged_in() ) {
if ( !defined( 'DOING_AJAX' ) && !current_user_can('administrator') ){
wp_redirect( site_url() ); exit;
}
}
}
add_action( 'admin_init', 'redirect_non_admin_user' );
Большое вам спасибо за предложение этого решения:-)
К сожалению, ни один из вышеперечисленных кодов не сработал для меня, так как они просто перенаправили не администратора на домашнюю страницу, даже если я хотел, чтобы авторы и участники могли добавлять/редактировать и удалять свои сообщения... Я закончил удалять поля на панели управления и решил (частично) свою проблему.
Я добавил это в functions.php
function disable_default_dashboard_widgets() {
remove_meta_box('dashboard_right_now', 'dashboard', 'core');
remove_meta_box('dashboard_recent_comments', 'dashboard', 'core');
remove_meta_box('dashboard_incoming_links', 'dashboard', 'core');
remove_meta_box('dashboard_plugins', 'dashboard', 'core');
remove_meta_box('dashboard_quick_press', 'dashboard', 'core');
remove_meta_box('dashboard_recent_drafts', 'dashboard', 'core');
remove_meta_box('dashboard_primary', 'dashboard', 'core');
remove_meta_box('dashboard_secondary', 'dashboard', 'core');
}
add_action('admin_menu', 'disable_default_dashboard_widgets');
Я знаю, что это все еще старый вопрос, но вы можете взглянуть.
function redirect_non_admin_user(){
if ( !defined( 'DOING_AJAX' ) && !current_user_can('administrator') ){
wp_redirect( site_url() ); exit;
}
}
add_action( 'admin_init', 'redirect_non_admin_user' );
Эта проверка очень ВАЖНА "!определено ('DOING_AJAX')", когда вы используете вызов ajax администратора во внешнем интерфейсе.
Вам нужно проверить только две вещи:
- Если пользователь находится в интерфейсе администратора
- Получил ли он возможность или нет
Пока мы используем крючок template_redirect
, нам не нужно проверять страницы входа/регистрации/пароля, так как перенаправление будет невидимым для пользователя.
Вот идея, воплощенная в виде небольшого (mu-) плагина.
<?php
/**
* Plugin Name: (#90535) Redirect Non-Admin users to the "Home"-page.
* Description: Checks if we're in the admin UI and if the user has the admin only 'manage_options' capability
* Version: 2013.03.12
* Author: Franz Josef Kaiser
*/
add_action( 'template_redirect', 'wpse90535_admin_denied' );
function wpse90535_admin_denied()
{
is_admin()
&& ! current_user_can( 'manage_options' )
and exit( wp_redirect( home_url(), 302 ) );
}