php – 使网站登录也可以在WordPress上运行
我使用
PHP和MySQL开发了一个网站,它已经有一个登录和注册表单. (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并使用该函数 对于未正确散列的现有密码,您必须设置电子邮件密码重置. 要么.如果您想保留当前的密码哈希值(不建议出于安全原因但可行),您可以更改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 }; ?> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |