如何为wordpress

时间:2015-10-23 13:07:48

标签: wordpress yii login credentials

到目前为止,我已经集成了一个多站点wordpress,它在一个wordpress安装中使用了4个主要的子域模板:college.mysite.com | jobs.mysite.com | advisors.mysite.com | answers.mysite.com

wp用户只需要登录一次,他们就可以立即使用任何wp模板。

然而,我想要实现的是比这复杂一点。我不希望新用户和现有成员使用wordpress作为访问私人内容的主要用户界面。

实际上我已经完全禁用了注册和隐藏的wp登录。 我想要一个更安全,更少公开的注册/登录。

对于这个场合,我希望wordpress忽略默认的登录凭据,而是使用从同一个wordpress数据库中提取的自定义db表名和hashmethod。

例如,我有一个叫做humhub的yii平台。 对于用户使用wordpress,他们需要通过humhub登录并让wp读取db表名: 用户而不是wp_users

需要为密码读取辅助数据库名称,因为humhub使用: user_password而不是wp_users(user_pass)

中的默认值

我尝试将yii框架与wordpress集成在一起,我尝试在yii框架内进行调整,以便分别读取两个数据库,但它比简单地重定向wp要复杂得多通过更改wordpress文件中的默认登录表名来登录凭据, 请帮帮我,

1 个答案:

答案 0 :(得分:0)

假设您有一些唯一标识符,以便一个用户不会意外地与另一个用户发生冲突(在YII / HumHub中)

您可以通过

加载WordPress API
require_once("/path/to/wp-load.php");
//Found normally in the WordPress root directory alongside wp-config.php

然后,您可以在HumHub中创建新用户时执行:

wp_create_user( $username, $password, $email ); 
//Where username is the unique identifier
//password is ideally a random hash
//email is their email if relevant

然后登录(假设您记住了用户名和密码!!)

$creds = array();
$creds['user_login'] = $username;
$creds['user_password'] = $password;
$creds['remember'] = true;
$user = wp_signon( $creds, false );
if ( !is_wp_error($user) ) {
    ob_start(); //flush buffers - otherwise login won't work or user gets redirected to dashboard
    $user_id = $user->ID;
    wp_set_current_user( $user_id, null );
    wp_set_auth_cookie( $user_id,true );
    do_action( 'wp_login', $username );
    ob_end_clean();
} else {
   //Handle the login error
}

然后他们使用cookie等登录到WordPress,没有任何标题干扰HumHub

注意 - 上述方法可能无效,因为WordPress和YII / HumHub之间存在名称冲突。如果是这种情况你会得到一个php错误,其中包含冲突的详细信息,并且必须尝试别的东西(例如Oauth插件)