使用外部数据库中的信息在登录时在WordPress网站中创建用户帐户

时间:2014-12-04 04:56:03

标签: php wordpress login

我有一个PHP网站,在MySQL数据库中有自己的用户。该网站“活着”,因此将在未定义的时间内继续创建新的用户帐户。

现在我必须使用WP创建另一个网站,具有以下两个特点:

  • 只有在用户登录网站时才能访问网站的某些部分
  • 可以访问此WP网站的用户是第一个网站使用的用户表中部分的用户。这很重要,因为并非所有这些用户都有权访问,只有那个拥有某个值的某个字段的用户具有特定值。

完成此操作的第一种方式我想到的是创建一个自定义登录功能来完成所有处理,而不会让wordpress自己为这些用户创建任何类型的用户帐户。我不是WP开发人员,但我想通过一些研究我可以找到如何做到这一点。

该选项的问题在于我计划包括一个论坛以及其他可能需要WP中的用户帐户以跟踪评论,帖子等的功能

那么为什么我想寻求建议如何处理所有这些。理想情况下,我需要的是一个实现:

  • 当用户想要访问网站的某些部分时要求登录
  • 使用自定义函数检查外部数据库中的用户凭据,该函数不仅验证用户名和密码,还验证第三个(甚至第四个)字段
  • 登录时,如果是第一次,使用用户在其他网站上的信息为WP中的该用户创建一个帐户,但阻止任何典型的帐户管理功能(更改个人资料信息,密码等)

我知道通过一些编码,一切都可以完成,我只是不太了解Wordpress,所以我不知道是否所有这些都太复杂了。

我想到的

Anther选项是在创建原始网站中的帐户时在WP中创建用户帐户,但我不知道这是否可能在“合法的“方式(从另一个网站为WP创建一个帐户)。

非常感谢有关此主题的任何建议

1 个答案:

答案 0 :(得分:2)

一个解决方案是通过将旧网站的信息推送到wordpress来在wordpress中创建帐户。我确定你有一个触发器(当你决定需要在wordpress中创建用户时的某个时刻)当触发器需要触发时,让你的网站将用户信息发送到wordpress中的脚本,在wordpress站点你需要创建一个新的php文件来创建这样的用户:

您的PHP网站决定它有一个用户检查您在WordPress网站上拥有帐户的所有原因,因此它将生成wget或curl(针对直接解决方案),其中包含需要传递给WordPress的所有信息作为参数可能像

yourWPwebsite.com/createUser.php?username=<?php echo the username ?>&email=<?php echo the user email; ?>&...

然后在WordPress网站的根目录中创建一个createUser.php文件(取决于您可能需要修改的设置.htaccess,但在大多数设置上它应该有效)

在该文件(createUser.php)中首先包括WordPress,包括fallowing wp-load.php:

require( 'wp-load.php' ); //if you put this script in another place then root you need to make sure you change the path for this file.

之后你可以使用任何WordPress函数,所以作为安全性我建议只接受来自其他站点ip的视图或包含某种令牌来验证信息的来源以及源是否未经过身份验证的重定向到404或主页或你想要的任何消息,然后阅读获取变量(你可能想对它们进行一些清理)

然后使用fallowing wp函数创建用户:<?php wp_create_user( $username, $password, $email ); ?>

您可能使用的代码如下所示:

$user_id = username_exists( $user_name );
if ( !$user_id and email_exists($user_email) == false ) {
    $random_password = wp_generate_password( $length=12, $include_standard_special_chars=false );
    $user_id = wp_create_user( $user_name, $random_password, $user_email );
} else {
    $random_password = __('User already exists.  Password inherited.');
}

如果您希望用户具有特定角色,您可以添加角色管理/编辑插件并创建新角色,然后将该角色另外设置为默认值如果您想强制为用户添加角色,则需要添加以下代码在上述之后:

$user_id = wp_update_user( array( 'ID' => $user_id, 'role' => "DesiredRoleHere" ) );

使用用户管理插件,你可以删除用户和其他(很多)事物的配置文件权限,检查像Multisite User Management这样的插件来获得一个想法(其他人可能会更好),那就是关于它然后用户将您的wordpress网站上有一个帐户,其中包含您设置的密码,如果您想对用户进行身份验证,您可以采取类似的步骤,但是auth脚本会调用wp_authenticate并且脚本类似于:

 $logging = wp_authenticate ($username, $password);
 //then redirect to the page you want to redirect users when they log in

这不是很多编码,但你需要深入了解每一步的确切限制。

另一种解决方案可能是使用像WP API这样的API,但我还没有使用它,我不知道你可以做些什么来验证用户并将他/她重定向到你想要的wp页面而不是知道...