Wordpress自定义登录与错误处理

时间:2012-09-13 19:25:50

标签: php wordpress login

您好我正在尝试使用header.php下拉列表中的Wordpress自定义登录信息,以便在输入错误的电子邮件或密码时显示错误,或者即使两者或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中,但它不起作用 - 我是否必须在我的表单中调用它,如果是这样的话?我应该把代码放在哪里:

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

3 个答案:

答案 0 :(得分:0)

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

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

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

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

希望这有帮助。

答案 1 :(得分:0)

如果用户点击登录按钮而未填写用户名,则将以下代码放入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();
        }
    }

答案 2 :(得分:0)

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.";
     }