我正在使用几个插件与我们的 LDAP/AD 服务器集成 - 该插件在成功身份验证/创建 wp 用户时会添加一些用户元。我还使用终极会员插件来控制角色等。
我需要做的是确保使用其 ldap 信条登录的任何人都被分配了 ldap UM 角色。这就是我到目前为止得到的PHP。
global $ultimatemember;
global $user_ID;
$key = 'ad_integration_account_suffix';
$single = true;
$ldap_user=get_user_meta( $user_ID, $key, $single ); // core WP coe to get a users meta info - we are assigning it a variable
echo '<p>The '. $key . ' value for user id ' . $user_ID . ' is: ' . $ldap_user . '</p>'; // some debug stuff - take this out
um_fetch_user( $user_ID ); // set UM user id to retrieve
if($ldap_user !== '') { // if the ldap user key is not null then its populated and thus this user is a member of AD
$ultimatemember->user->set_role('ldap_user'); // so set the UM user to be a member of the ldap_user role/group.
}
现在,我认为上述内容存在一些问题,即我认为它也需要包装在一个函数中?我应该把这个 php 片段贴在哪里,以便在登录时调用它?我可能还应该首先检查用户是否已经在ldap_user组中,如果是这样,我们不需要继续其余的检查/设置等。
我建议创建自己的插件来处理您的LDAP功能。有了它,使用 wp_login
钩子在登录时触发您的代码。
如果您从未在Wordpress中创建过插件,那么通过几个步骤即可完成此操作:
- 在
wp-content/plugins/
中创建一个文件夹 - 我们称之为ldap-authentication
-
在里面,创建一个新的PHP文件(我们称之为
ldap-authentication.php
),并在顶部添加以下注释:/* Plugin Name: LDAP Authentication Version: 1.0 Description: Performs LDAP authentication Author: Tony */
- 在扩展页面中启用此插件
要挂wp_login,请执行以下操作(我对您的代码进行了一些更改以反映WP_User
对象的使用):
function my_ldap_authentication($login, $user) {
global $ultimatemember;
global $user_ID;
$key = 'ad_integration_account_suffix';
$single = true;
$ldap_user = get_user_meta($user->ID, $key, $single);
um_fetch_user($user->ID);
if($ldap_user !== '') {
$ultimatemember->user->set_role('ldap_user');
}
}
add_action('wp_login', 'my_ldap_authentication', 10, 2);
如果想知道用户是否在ldap_user
组中,可以使用以下内容:
if(in_array('ldap_users', $user->roles)) {
// is an ldap user
}
您还可以查看重力表单插件(带有注册附加组件) 有了这个,您可以拥有一个注册表单,该表单在站点的前端分配所有自定义角色。以及您的用户编辑其配置文件的能力(也在前端)。
我已经建立了几个带有保护区的会员网站,我们使用重力表单插件来处理注册以及 Justin Tadlock 的会员插件来处理新用户的角色/功能