该项目使用WordPress,由于WordPress登录/注册表单只是部分可定制的,我需要构建自己的HTML表单并将用户名+密码提交给WordPress。从HTML表单提交证书到WordPress登录过程
我有一个问题,因为我不知道如何从表单字段获取数据并将它们提交给(通过)用于WordPress登录的PHP处理器。
假设我有这样的形式比较简单的短代码:
function project_login_form() {
if(!is_user_logged_in()) {
$output = project_login_form_fields();
}
return $output;
}
add_shortcode('login_form', 'project_login_form');
然后字段在该功能定义:
function project_login_form_fields() {
ob_start();
// show any error messages after form submission
project_show_error_messages(); ?>
<form id="project_login_form" class="col-md-8" action="" method="post">
<div class="row">
<div class="input-field col-md-3">
<label for="project_user_login">Username</label>
<input name="project_user_login" id="project_user_login" class="required" type="text"/>
</div>
<div class="input-field col-md-3">
<label for="project_user_pass">Password</label>
<input name="project_user_pass" id="project_user_pass" class="required" type="password"/>
</div>
<input type="hidden" name="project_login_nonce" value="<?php echo wp_create_nonce('project-login-nonce'); ?>"/>
<input id="project_login_submit" type="submit" value="Login"/>
<div>
</form>
<?php
return ob_get_clean();
}
什么是“连接”这一正确的方法所以要从 project_user_login
和project_user_pass
得到的值,传递给WordPress登录过程?
这下面是我到目前为止,但是当我打的登录按钮,我得到 Invalid username
和Incorrect password
(是的,他们是正确的,我相信:))
function project_login_member() {
if(isset($_POST['project_user_login']) && wp_verify_nonce($_POST['project_login_nonce'], 'project-login-nonce')) {
// this returns the user ID and other info from the user name
$user = get_user_by('login','some-name');
if(!$user) {
// if the user name doesn't exist
project_errors()->add('empty_username', __('Invalid username'));
}
if(!isset($_POST['project_user_pass']) || $_POST['project_user_pass'] == '') {
// if no password was entered
project_errors()->add('empty_password', __('Please enter a password'));
}
// check the user's login with their password
if(!wp_check_password($_POST['project_user_pass'], $user->user_pass, $user->ID)) {
// if the password is incorrect for the specified user
project_errors()->add('empty_password', __('Incorrect password'));
}
// retrieve all error messages
$errors = project_errors()->get_error_messages();
// only log the user in if there are no errors
if(empty($errors)) {
wp_set_auth_cookie($_POST['project_user_login'], $_POST['project_user_pass'], true);
wp_set_current_user($user->ID, $_POST['project_user_login']);
do_action('wp_login', $_POST['project_user_login']);
wp_redirect(home_url()); exit;
}
}
}
add_action('init', 'project_login_member');