【问题标题】:Create new admin, wordpress创建新管理员,wordpress
【发布时间】:2010-11-16 21:15:06
【问题描述】:

这个问题是关于 WordPress cms 的。

如何使用托管在同一站点上的简单脚本创建具有所需密码的新管理员用户

就像,我们有网站http://example.com/

还有脚本http://example.com/ourscript.php

如果我们打开脚本页面,应该在 admin-panel 中再创建一个管理员用户。

这可以通过一些 mysql-query 来完成。

谢谢。

【问题讨论】:

    标签: php wordpress admin


    【解决方案1】:

    你需要做两个查询:

    1.)
    insert into wp_users values('','admin_username','user_password','admin','user_email','user_url','registration_date','',0,'admin')
    
    2.)
    insert into wp_usermeta values ('','user_id','wp_capabilities','a:1:{s:13:"administrator";s:1:"1";}')
    

    你需要记住一些事情:

    • 用户名必须是唯一的
    • 密码必须经过哈希处理 wp_hash_password()
    • 第二条语句中的user_id 是第一个的insert_id 声明。

    这里是一些示例代码:

    <?php
        //get required support files
            require("database.class.php");
            require("wordpress/functions.php");
    
        //build the first insert array and send
            $array['user_login'] = "james";
            $array['user_pass'] = wp_hash_password("test");
            $array['user_nicename'] = "James";
            $array['user_email'] = "me@jtgraphic.net";
            $array['user_url'] = "http://jtgraphic.net";
            $array['user_registered'] = date("Y-m-d H:i:s");
            $array['user_status'] = 0;
            $array['display_name'] = "James";
    
            $user_id = $database->insert("wp_users",$array);
    
        //build the second insert array and send
            $array['user_id'] = $user_id;
            $array['meta_key'] = "wp_capabilities";
            $array['meta_value'] = "a:1:{s:13:"administrator";s:1:"1";}";
    
            $database->insert("wp_usermeta",$array);
    ?>
    

    数据库对象可以在这里找到:

    http://www.jtgraphic.net/code/database-object/

    【讨论】:

    • 非常感谢,如果您提供完整的工作示例,例如我们正在谈论使用登录名“james”创建新管理员
    • 抱歉,还有一个问题。为什么我们需要'functions.php'?
    • 这是wordpress函数文件(你需要相应地修改URI)。它让我们可以访问 wp_hash_password() 函数。
    • 你的意思是 wp-load.php?谢谢。
    • 我尝试了脚本并在 "$array['meta_value'] = "a:1:{s:13:"administrator";s:1: "1";}";"线。任何想法为什么?
    【解决方案2】:

    我最近不得不从命令行为许多 Wordpress 站点创建管理员用户,我创建了这个脚本,您可以从 phpMyAdmin 或 shell 命令行运行它: 您需要做的就是配置用户名、密码和电子邮件并运行它。

    将“wp_prefix”硬编码为“wp_”的简单版本

    创建 Wordpress 管理员用户:

    SET @username = 'YOUR_USERNAME';
    SET @password = 'YOUR_PASSWORD';
    SET @email = 'YOUR@EMAIL.COM';
    INSERT INTO `wp_users` (`user_login`, `user_pass`, `user_nicename`, `user_email`, `user_status`) VALUES (@username, MD5(@password), @username, @email, '0');
    SET @userid = LAST_INSERT_ID();
    INSERT INTO `wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, @userid, 'wp_capabilities', 'a:1:{s:13:"administrator";s:1:"1";}');
    INSERT INTO `wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, @userid, 'wp_user_level', '10');
    

    删除您的用户

    SET @username = 'YOUR_USERNAME​';
    SET @userid := (SELECT `ID` FROM `wp_users` WHERE `user_login` = @username);
    DELETE FROM `wp_users` WHERE `ID` = @userid LIMIT 1;
    DELETE FROM `wp_usermeta` WHERE `user_id` = @userid LIMIT 2;
    

    使用准备好的语句和可配置的“wp_prefix”的更高级版本

    创建管理员用户

    SET @username = 'YOUR_USERNAME';
    SET @password = 'YOUR_PASSWORD';
    SET @email = 'YOUR@EMAIL.COM';
    SET @wp_prefix = 'MY_WP_PREFIX_';
    
    SET @sql_user = CONCAT('INSERT INTO `',@wp_prefix,'users` (`user_login`, `user_pass`, `user_nicename`, `user_email`, `user_status`)
    VALUES ("',@username,'", MD5("',@password,'"), "',@username,'", "',@email,'", "0")');
    PREPARE sql_user FROM @sql_user;
    EXECUTE sql_user;
    DEALLOCATE PREPARE sql_user;
    
    SET @userid = LAST_INSERT_ID();
    SET @wp_usermeta1 = CONCAT("INSERT INTO `",@wp_prefix,"usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, ?, '",@wp_prefix,"capabilities', 'a:1:{s:13:\"administrator\";s:1:\"1\";}')");
    PREPARE wp_usermeta1 FROM @wp_usermeta1;
    EXECUTE wp_usermeta1 USING @userid;
    DEALLOCATE PREPARE wp_usermeta1;
    
    SET @wp_usermeta2 = CONCAT('INSERT INTO `',@wp_prefix,'usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, "',@userid,'", "',@wp_prefix,'user_level", "10")');
    PREPARE wp_usermeta2 FROM @wp_usermeta2;
    EXECUTE wp_usermeta2;
    DEALLOCATE PREPARE wp_usermeta2;
    

    删除用户

    SET @username = 'YOUR_USERNAME';
    SET @wp_prefix = 'MY_WP_PREFIX_';
    
    SET @sql_userid = CONCAT('SELECT @userid := `ID` FROM `',@wp_prefix,'users` WHERE `user_login` = "',@username,'"');
    PREPARE sql_userid FROM @sql_userid;
    EXECUTE sql_userid;
    DEALLOCATE PREPARE sql_userid;
    
    SET @wp_users = CONCAT('DELETE FROM `',@wp_prefix,'users` WHERE `ID` = "',@userid,'" LIMIT 1');
    PREPARE wp_users FROM @wp_users;
    EXECUTE wp_users;
    DEALLOCATE PREPARE wp_users;
    
    SET @wp_usermeta = CONCAT('DELETE FROM `',@wp_prefix,'usermeta` WHERE `user_id` = "',@userid,'" LIMIT 2');
    PREPARE wp_usermeta FROM @wp_usermeta;
    EXECUTE wp_usermeta;
    DEALLOCATE PREPARE wp_usermeta;
    

    【讨论】:

    • 小心!您正在使用没有任何盐的 MD5 对密码进行哈希处理。这使得它很容易破解。考虑改用wp_hash_password()
    • 感谢您的“创建管理员用户”!关于上面的评论......你意识到wp_hash_password()不是一个MySQL函数,不是吗?
    【解决方案3】:

    James 的代码示例对我不起作用,所以我写了类似的东西。将此代码放在一个文件中,例如在 wordpress/wp-includes 目录中的 createhash.php。

    <?php
      define("ABSPATH", "../");
      define("WPINC", "");
      require("pluggable.php");
      print(wp_hash_password("Your password") . "\n");
    

    将“您的密码”更改为您的密码,然后输入php createhash.php,它应该会打印出您密码的密码哈希。

    干杯,戴夫。

    【讨论】: