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

Php 使用外部数据库中的信息在WordPress网站登录时创建用户帐户,php,wordpress,login,Php,Wordpress,Login,我有一个PHP网站,在MySQL数据库中有自己的用户。该网站处于“活动”状态,因此新用户帐户将在未定义的时间内继续创建 现在我必须使用WP创建另一个网站,具有以下两个特点: 只有当用户登录网站时,才能访问网站的某些部分 可以访问此WP网站的用户是第一个网站使用的用户表中的部分用户。这一点很重要,因为并非所有的用户都有访问权限,只有那些在该表中有一个字段具有特定值的用户才有访问权限 实现这一点的第一个方法是创建一个自定义的登录函数,它可以完成所有的处理,而不需要wordpress自己为这些用户

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

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

  • 只有当用户登录网站时,才能访问网站的某些部分
  • 可以访问此WP网站的用户是第一个网站使用的用户表中的部分用户。这一点很重要,因为并非所有的用户都有访问权限,只有那些在该表中有一个字段具有特定值的用户才有访问权限
实现这一点的第一个方法是创建一个自定义的登录函数,它可以完成所有的处理,而不需要wordpress自己为这些用户创建任何类型的用户帐户。我不是一个可湿性粉剂开发人员,但我想通过一些研究,我可以找到如何做到这一点

这个选项的问题是,我计划包括一个论坛和其他功能,这些功能实际上需要WP中的用户帐户来跟踪评论、帖子等

因此,我想寻求建议的原因是如何处理这一切。理想情况下,我需要的是一个实现:

  • 当用户想要访问站点的某些部分时,请求登录
  • 登录时检查外部数据库中的用户凭据,使用自定义函数不仅验证用户名和密码,还验证第三个(甚至第四个)字段
  • 登录时,如果是第一次,则使用该用户在其他网站中的信息在WP中为该用户创建一个帐户,但阻止任何典型的帐户管理功能(更改配置文件信息、密码等)
我知道,通过一些编码,这一切都可以完成,我只是不太了解Wordpress,所以我不知道这一切是否会太复杂

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


任何关于这个主题的建议都将不胜感激

一个解决方案是在wordpress中创建帐户,将信息从旧网站推送到wordpress。我相信你有一个触发器(当你决定需要在wordpress中创建用户时),当该触发器需要触发时,让你的网站将用户信息发送到wordpress中的脚本,在wordpress站点中,你需要创建一个新的php文件,该文件将创建如下用户:

$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.');
}
您的PHP网站决定它有一个用户检查在您的WordPress网站上拥有帐户的所有原因,因此它将生成一个wget或curl(对于直截了当的解决方案),其中包含需要传递给WordPress作为参数的所有信息,例如

yourWPwebsite.com/createUser.php?用户名=&email=&…

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

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

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或主页或任何您想要的消息,然后读取get变量(您可能需要对其进行一些清洁)

然后使用fallowing wp函数创建用户:

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

$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" ) );
使用用户管理插件,您可以删除用户的配置文件权限,以及其他(很多)事情。检查一个插件以获得想法(其他插件可能更好)就这样,用户将在您的wordpress网站上拥有一个帐户,并使用您设置的密码。如果您想验证用户身份,您可以采取类似的步骤,但auth脚本将调用并拥有一个类似于以下内容的脚本:

 $logging = wp_authenticate ($username, $password);
 //then redirect to the page you want to redirect users when they log in
这并不需要太多的编码,但您需要深入了解它,以确切了解每一步都有哪些限制


另一个解决方案可能是使用API,如,但我没有使用它,我不知道您可以做什么来验证用户身份并将其重定向到所需的wp页面不确定…

是否有任何用户将直接在WordPress中创建其帐户,或者所有用户都应该创建其帐户并将其扔到其他网站?@alex否其中一个用户将直接在WPS中创建他们的帐户非常感谢您的透彻解释,我唯一没有完全了解的部分是如何处理登录。如果我理解正确,通过在用户创建部分进行操作,登录不应该有任何更改,对吗?按照您提出的解决方案进行操作有两件事我需要弄清楚:1.当用户在原始网站中更改密码时(在WP中也应该更改),如何处理。2.当用户“失去”访问原始网站的权利时(以及该WP网站),如何处理您可以在一个php文件中处理这些事情,并在链接中添加一个参数,如createUser=1或updateUser=1或loginUser=1,在一个文件中处理这些情况,或者为每件事情创建不同的php文件(我认为您应该只使用一个文件),并为每个操作创建脚本,请查看wordpress codex以获取有关如何处理这些问题的示例