Wordpress自定义登录并进行错误处理


Wordpress custom login with error processing

嗨,我正在尝试获取我的Wordpress自定义登录,该登录位于header.php的下拉列表中,以在输入错误的电子邮件或密码时显示错误,或者即使两者或1都为空。

这是我使用的登录表格

<?php
if ( ! is_user_logged_in() ) { // Display WordPress login form:
    $args = array(
      'redirect' => admin_url(), 
      'form_id' => 'loginform-custom',
      'label_username' => __( 'Username custom text' ),
      'label_password' => __( 'Password custom text' ),
      'label_remember' => __( 'Remember Me custom text' ),
      'label_log_in' => __( 'Log In custom text' ),
      'remember' => true
    );
    wp_login_form( $args );
} else { // If logged in:
    wp_loginout( home_url() ); // Display "Log Out" link.
    echo " | ";
    wp_register('', ''); // Display "Site Admin" link.
}
?>

我从这里找到了这个代码:https://wordpress.stackexchange.com/questions/61267/prevent-wp-login-form-from-redirecting-to-wp-admin-when-there-are-errors

function wp_authenticate($username, $password) {
    $username = sanitize_user($username);
    $password = trim($password);
    $user = apply_filters('authenticate', null, $username, $password);
    if ( $user == null ) {
        $user = new WP_Error('authentication_failed', __('<strong>ERROR</strong>: Invalid username or incorrect password.'));
    }
    $ignore_codes = array('empty_username', 'empty_password');
    if (is_wp_error($user) && !in_array($user->get_error_code(), $ignore_codes) ) {
        // Put your code here
    }
    return $user;
}

我已经将上面的内容复制到主题文件夹中的functions.php中,但它不起作用——我必须在表单中调用它吗?如果是,如何调用?我应该把什么代码放在上面写着:

//把你的代码放在这里?

函数wp_authenticate($username,$password)是一个wp函数,因此无需将其添加到functions.php中。它可以在wp-includes目录的plugable.php中找到。

是的,您必须在表单或验证脚本中调用它,就像调用任何其他函数一样。例如:

$CheckValidUser = wp_authenticate($username, $password);

我想你应该在调用is_user_loged_in()之前调用它,否则就不会有任何$username或$password,因为WP已经拒绝了该用户。

希望这能有所帮助。

如果用户在没有填写用户名的情况下点击登录按钮,则将以下代码放入functions.php中;密码,它将移动到wp-login.php页面。

我们可以通过在functions.php文件中编写以下代码来解决这个问题。

add_action('init', 'prevent_wp_login');
function prevent_wp_login() {
        if(isset($_POST['log']) && isset($_POST['pwd']))
        if($_POST['log']=='' && $_POST['pwd']=='')
        {
                $page = write your redirect url;
                // Redirect to the your url
                wp_redirect($page);
        exit();
        }
    }

wp_signon()函数使用自定义登录,它对我来说很好:

require('wp-load.php'); 
$err = '';
$success = '';
global $wpdb,$current_user;
    $response = array();
    $data = json_decode(file_get_contents("php://input"));
    $email    = $data->email_id;
    $password = $data->password;
    $username = $wpdb->escape($email);
    $password = $wpdb->escape($password);
    $remember = true;
    if($remember) $remember = "true";
    else $remember = "false";
    $login_data = array();
    $login_data['user_login'] = $username;
    $login_data['user_password'] = $password;
    $login_data['remember'] = $remember;
    $user_verify = wp_signon( $login_data, false ); 
    set_current_user($user_verify->ID);
    if (is_user_logged_in()) 
    {
        get_currentuserinfo();
            $response['user_id']=$user_verify->ID;
            $response['first_name']=$current_user->user_firstname ;
            $response['last_name']=$current_user->user_lastname;
            $response['email']=$current_user->user_email;
      $status="success";
      $msg="";
    } else {    
      $status="failed";
      $msg="Invalid Credential.";
     }