php – 使网站登录也可以在WordPress上运行

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 使网站登录也可以在WordPress上运行脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用 PHPMysqL开发了一个网站,它已经有一个登录注册表单. (myweb.com)

在这个url myweb.com/blog上添加wordpress

我想在wordpress上禁用登录注册页面并强制用户使用我的.基本上将我的登录wordpress集成,以便用户将在两个站点登录.

我的网站成员表看起来像这样.并且所有注册用户都存储在此处.我的数据库中的密码使用md5()进行哈希处理

id | name | email | password

wordpress结构是这样的,目前是空的

ID | user_login | user_pass | user_nicename | user_email | user_url | user_registered | user_activation_key | user_status | display_name

我尝试按照步骤mentioned here

但是我在第254行var_dump($user)上得到了这个错误;

object(WP_Error)#620 (2) {
  ["errors"]=>
  array(1) {
    ["invalid_username"]=>
    array(1) {
      [0]=>
      string(166) "<strong>ERROR</strong>: Invalid username. <a href="http://localhost/dev/blog/wp-login.PHP?action=lostpassword" title="Password Lost and Found">Lost your password</a>?"
    }
  }
  ["error_data"]=>
  array(0) {
  }
}

此外,所有用户信息都存储在我的站点上的成员表中,而不是存储在wordpress数据库中.

这是我的网站的登录代码,我最近也添加wordpress登录.

/*
 *  Login
 *
 *  $email = email of user
 *  $pass = user password (must already be in md5 form)
 *  $url = url of page they are login from
 */
function login($email = '',$pass = '',$url = '',$sticky = false)
{
        global $lang,$_db,$mod,$template_style;

        // Replace nasty things to stop sql injection
        $email = addslashes(strtolower($email));
        $email = strip_tags($email);
        $email = htmlspecialchars($email,ENT_QUOTES);

        //get user id
    $sql = "SELECT `id`,`name`,`username`
                FROM `members`
                WHERE `email`='".MysqL_real_escape_string($email)."'
                AND `pass` = '" . MysqL_real_escape_string($pass) . "'
                LIMIT 0,1";

        $q = $_db->query($sql);
        list($uid,$name,$username) = $_db->fetch_array($q);

        $login_check = $_db->num_rows($q);

        if ($login_check <= '0')  //check if login matches
        {
                  echo '0'; //login Failed
                  die;
        }

        /*
         * wordpress login
         * 
         * read:
         * http://codex.wordpress.org/Function_Reference/wp_update_user
         */ 
         $credentials = array();
         $credentials['user_email'] = $email;
         $credentials['user_password'] = $pass;
         $credentials['remember'] = $sticky; // true/false
         $secure_cookie = false; // true / false

         $user = wp_authenticate($credentials['user_email'],$credentials['user_password']);

    if ( is_wp_error($user) ) {
        if ( $user->get_error_codes() == array('empty_email','empty_password') ) {
            //$user = new WP_Error('','');
            $user = wp_update_user(array ( 'user_login' => $name,'user_email' => $email,'user_pass' => $pass ));
        }
    }

        var_dump($user);

        wp_set_auth_cookie($user->ID,$credentials['remember'],$secure_cookie);
        do_action('wp_login',$user->user_login,$user);

        /*
            set login cookies
        */
        set_login_cookie($uid,$pass,$sticky);

        //lock check
        lock_checker($uid);

        update_thisuser_online();           
}

我是否必须从我的成员表中复制所有内容并将其填充到wp_users中,或者有没有办法登录wordpress而不会在2个不同的表中重复数据?我不想在两个网站上都有2个登录和2个注册表单.

为什么我的代码中的wp_authenticate()不会进行身份验证?

您可以通过编辑config.PHP添加以下两行来设置wordpress登录以使用自定义表:
define('CUSTOM_USER_TABLE','new_user_table'); //login,pass,email etc
define('CUSTOM_USER_Meta_TABLE','new_userMeta_table'); //optional bio,don't have to include this line

new_user_table是您网站的表格,new_userMeta_table是您网站的生物表格(如果您需要)

自定义表需要具有与普通wordpress表相同的结构.因此,要使用现有网站的表格,您必须添加一些字段并确保密码以相同的方式进行哈希处理.

Here is how to structure the user table

Here is how to structure the user meta table

要在注册时正确散列密码,请包含文件wp-includes / pluggable.PHP并使用该函数
<?PHP $hash = wp_hash_password($password)?>

对于未正确散列的现有密码,您必须设置电子邮件密码重置.

要么.如果您想保留当前的密码哈希值(不建议出于安全原因但可行),您可以更改wordpress哈希功能.在wp-includes / pluggable.PHP中更改:

if ( !function_exists('wp_hash_password') ){
    function wp_hash_password($password) {
                //apply your own hashing structure here
            return $password;
    }
}

并改变:

if ( !function_exists('wp_check_password') ){
    function wp_check_password($password,$hash,$user_id = '') {
            //check for your hash match
            return apply_filters('check_password',$check,$password,$user_id);
            }
}

有关wp_check_password Go Here的详细信息

另外

您可以跳过自定义用户表,并将wordpress登录应用于您网站的其余部分.为此,请使用以下代码

<?PHP
include 'wp-config.php';
if ( is_user_logged_in() ) {
    echo 'Welcome,registered user!';
} else {
    header( 'Location: http://google.com' ) ;
};
?>

确保’wp-config.php’是文件的完整相对路径,然后将此代码放在非WordPress网站的每个页面中.将echo替换为要为登录用户显示的任何内容,并将该标头替换为要为guest虚拟机显示的任何内容.如果内容是简单的html,您可以执行以下操作:

<?PHP
include 'wp-config.php';
if ( is_user_logged_in() ) {
?>

<html>
<head></head>
<body><p>Welcome Registered user</p></body>
</html>

<?PHP
} else {
?>

<html>
<head></head>
<body><p>Please log in</p></body>
</html>

<?PHP
};
?>

脚本宝典总结

以上是脚本宝典为你收集整理的php – 使网站登录也可以在WordPress上运行全部内容,希望文章能够帮你解决php – 使网站登录也可以在WordPress上运行所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: