使用AJAX的WordPress自定义登录表单

时间:2018-08-20 作者:odedta

Description:我想创建一个自定义登录表单:用户名、密码和记住字段。这是我的代码:

Problem: /wp-admin/admin-ajax.php 503 ()

What I\'ve tried:PHP:

function normal_login() {
    if( !isset( $_POST ) ) {
        return ;
    }

    $username =  $_POST[ \'username\' ];
    $password =  $_POST[ \'pass\' ];
    $remember_me = \'on\' == $_POST[ \'remember_me\' ] ? true : false;

    $credentials = array(
        \'user_login\'    => $username,
        \'user_password\' => $password,
        \'remember\'      => $remember_me
    );

    $user = wp_signon( $credentials, false );

    if ( is_wp_error($user) ) {
        echo $user->get_error_message();
    }
    else {
        if ( !$remember_me ) {
            wp_setcookie( $username, $password, false, \'\', \'\', $remember_me );
        }
        wp_redirect( \'/\' );
    }
    wp_die();
}
add_action( \'wp_ajax_normal_login\',\'normal_login\' );
add_action( \'wp_ajax_nopriv_normal_login\',\'normal_login\' );

JS:

jQuery(document).ready(function( $ ) {

    $( \'#login-form button[type="submit"]\' ).on( \'click\', function( e ) {
        e.preventDefault();
        var username = $( \'#form-field-email-login\' ).val();
        var pass = $( \'#form-field-password\' ).val();
        var remember_me = $( \'#form-field-remember_me\' ).is( \':checked\' );
        $.ajax( {
            url: MY_AJAX_OBJ.MY_AJAX_URL,
            type: \'post\',
            data: {
                \'action\': \'normal_login\',
                \'username\': username,
                \'pass\': pass,
                \'remember_me\': remember_me,
            },
            success: function( response ) {
                console.log( response );
            },
            error: function( textStatus ) {
                console.log( textStatus );
            }
        } );
    } );

} );
我做错了什么?error\\u日志中没有错误
1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

我可以看到一些问题,但不能保证它会完全解决问题-你能保证吗WP_DEBUGWP_DEBUG_LOG 定义为true 在您的wp-config.php - 运行时期间的任何错误都应显示在wp-content/debug.log.

你有! isset( $_POST ) 作为检查请求的条件,但这将始终是false 因为$_POST superglobal始终处于设置状态-除非有发布的数据,否则它只是空的。相反,使用$_SERVER[\'REQUEST_METHOD\'] !== \'POST\'wp_setcookie 呼叫该函数已弃用,只是wp_set_auth_cookie, 这被称为&;经办人:wp_signon 无论如何window.location = responseData.redirectUrl)

结束