使用我提供的电子邮件远程创建wordpress用户

时间:2019-02-03 21:31:01

标签: php wordpress

我想远程创建具有贡献者特权的wordpress用户。但是,我也想使用我通过使用其ID(来自我网站的登录名)和@ example.com操纵的电子邮件创建他们的wordpress帐户。因此它实际上是:id#@example.com。我对编程非常陌生。我看了又看,只是继续挠头。这样做的最佳实践是什么?任何示例,资源,解释将不胜感激!

我当时正在考虑在其帐户页面中创建一个链接,当登录的用户单击该链接时,它将把他们重定向到将在wordpress框架内创建其用户帐户的页面。他们必须登录到我的网站才能访问。

2 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点。目前最干净的方法可能是将Wordpress API与JWT authentication一起使用。

这是一个更简单的解决方案。在远程Wordpress安装中,您可以将以下内容粘贴到您的functions.php

function remote_create_user() {
    $token = (isset($_GET['token'])) ? sanitize_text_field($_GET['token']) : '';
    $action = (isset($_GET['action'])) ? sanitize_text_field($_GET['action']) : '';

    //this is not particularly secure, but let's assume your wordpress page has https which should encrypt the url...
    //im just setting some random string to compare to
    if ($token != '712031ff105541219fcc741d99a9addd' || $action != 'createuser') {
        return;
    }

    $username = sanitize_text_field($_GET['username']);
    $email = sanitize_text_field($_GET['email']);

    //making sure the user doesn already exist
    $user_id = username_exists($username);
    if (!$user_id and email_exists($email) == false) {
        $random_password = wp_generate_password($length = 12, $include_standard_special_chars = false);
        //creating the user
        $user_id = wp_create_user($username, $random_password, $email);
        if ($user_id) {
            //here you could send the user a welcome mail. if you want, include the password in the mail or just make him press the "forgot password" button
            //wp_mail($to, $subject, $message);
            echo "User created";
        }
    } else {
        echo "User already exists.";
    }
}

add_action('init', 'remote_create_user');

在要从其发送命令的系统上,您可以执行以下操作(在服务器端,您不能从浏览器执行此操作,因为“身份验证”令牌将在javascript中可见。)

$createuser = file_get_contents('https://yourdomain.com/?token=712031ff105541219fcc741d99a9addd&action=createuser&username=test3&email=test3@test.com');
//depending on the result in $createuser, give an error message or redirect him to your wordpress login page or something

我希望这能给您一些想法。

编辑:Aboves初始化函数最后缺少wp_die()。我们不希望在这里呈现整个页面。而且,这只是一个快速而肮脏的解决方案。 查看Wordpress Rest API或自定义终结点。

答案 1 :(得分:1)

我不确定如何处理您问题的电子邮件部分。虽然,我想知道如何将两者融合在一起。但是,如果您需要用于wordpress的唯一电子邮件,则可以绕过此必填部分(如果使用wp仪表板创建用户,则是必需的)。我最近发现的。

您可以简单地:

$user_name = //however you get your unique identifier this will be their screen name

$user_id = username_exists( $user_name );
if ( !$user_id and email_exists($user_email) == false ) {
    $user_id = wp_create_user( $user_name, $user_email );
    wp_update_user(array(
        'ID' => $user_id,
        'role' => 'contributor'
    ));

}

如果您的用户确实在您的服务器上拥有一个电子邮件帐户,并且您希望他们从wordpress接收电子邮件。这将无法解决您的情况。