2

嗨,我正在尝试获取我的 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 中,但它不起作用 - 我是否必须在我的表单中调用它,如果是这样,如何?我应该在上面写什么代码:

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

4

3 回答 3

0

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

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

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

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

希望这可以帮助。

于 2012-11-10T09:48:21.767 回答
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();
        }
    }
于 2015-02-04T05:49:13.553 回答
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.";
     }
于 2017-03-31T06:39:18.323 回答