Как перенаправить не администраторов на домашнюю страницу, если вы пытаетесь просмотреть mysite.com/wp-admin /?


Я хочу, чтобы все мои пользователи (участники и авторы тоже), но администратор, были перенаправлены на домашнюю страницу, если они попытаются просмотреть mysite.com/wp-admin /. Участники и авторы должны иметь возможность добавлять и редактировать сообщения, как обычно, наряду с другими, которые они должны быть перенаправлены... Я уже удалил ссылку на панель мониторинга... Я также пробовал некоторые плагины, но тот, который становится ближе (Удаляет доступ к панели мониторинга), перенаправляет на главную страницу, но не позволяет участникам и авторам от добавления, редактирования и удаления сообщений. Спасибо!

 3
Author: user27309, 2013-03-12

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);
 5
Author: Miguel, 2013-03-12 20:57:57

Одно дополнение: ВСЕГДА проверяйте, есть ли вошедший в систему пользователь, иначе вы запретите отображение защищенных элементов на экране входа в систему:

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

Большое вам спасибо за предложение этого решения:-)

 3
Author: Aous, 2016-03-11 17:01:43

К сожалению, ни один из вышеперечисленных кодов не сработал для меня, так как они просто перенаправили не администратора на домашнюю страницу, даже если я хотел, чтобы авторы и участники могли добавлять/редактировать и удалять свои сообщения... Я закончил удалять поля на панели управления и решил (частично) свою проблему.

Я добавил это в 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');
 0
Author: user27309, 2013-03-13 10:47:59

Я знаю, что это все еще старый вопрос, но вы можете взглянуть.

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 администратора во внешнем интерфейсе.

 0
Author: Rocker Maruf, 2015-03-10 06:17:54

Вам нужно проверить только две вещи:

  • Если пользователь находится в интерфейсе администратора
  • Получил ли он возможность или нет

Пока мы используем крючок 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 ) );
}
 0
Author: kaiser, 2017-05-09 08:05:50