我想远程创建具有贡献者特权的wordpress用户。但是,我也想使用我通过使用其ID(来自我网站的登录名)和@ example.com操纵的电子邮件创建他们的wordpress帐户。因此它实际上是:id#@example.com。我对编程非常陌生。我看了又看,只是继续挠头。这样做的最佳实践是什么?任何示例,资源,解释将不胜感激!
我当时正在考虑在其帐户页面中创建一个链接,当登录的用户单击该链接时,它将把他们重定向到将在wordpress框架内创建其用户帐户的页面。他们必须登录到我的网站才能访问。
答案 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接收电子邮件。这将无法解决您的情况。