我正在尝试使用此教程WordPress AJAX Login Without a Plugin – The Right Way Natko Hasic构建了一个登录、注册和忘记密码表单,可以处理所有事情,包括AJAX错误消息。教程和我的项目之间的区别是。。。我不想在弹出窗口中这样做,而是在一个插件中这样做,而不是在根主题文件夹中。
这是我的代码。。。
页面模板中的代码:
<form name="login_form" id="login_form" class="login_form" action="" method="post">
<p class="status"></p>
<p>
<input type="text" name="username" id="username" placeholder="Username" />
</p>
<p>
<input type="password" name="password" id="password" placeholder="Password" />
</p>
<button name="submit" id="submit" class="btn"><?php _e("Sign in", "shorti"); ?></button>
<a class="lost" href="<?php echo wp_lostpassword_url(); ?>">Lost your password?</a>
<?php wp_nonce_field( \'ajax-login-nonce\', \'security\' ); ?>
</form>
在我的主插件中运行的代码。php文件:
<?php // The php script I\'m trying to run
add_action( \'init\', \'ajax_login_init\' );
function ajax_login_init() {
wp_register_script( \'ajax-login-script\', plugin_dir_url( __FILE__ ) . \'js/ajax-login-script.js\', array(\'jquery\') );
wp_enqueue_script( \'ajax-login-script\' );
wp_localize_script( \'ajax-login-script\', \'ajax_login_object\', array(
\'ajaxurl\' => admin_url( \'admin-ajax.php\' ),
\'redirecturl\' => home_url(),
\'loadingmessage\' => __( \'Sending user info, please wait...\' )
));
// Enable the user with no privileges to run ajax_login() in AJAX
add_action( \'wp_ajax_nopriv_ajaxlogin\', \'ajax_login\' );
}
// Check if users input information is valid
function ajax_login() {
// First check the nonce, if it fails the function will break
check_ajax_referer( \'ajax-login-nonce\', \'security\' );
//Nonce is checked, get the POST data and sign user on
$info = array();
$info[\'user_login\'] = $_POST[\'username\'];
$info[\'user_password\'] = $_POST[\'password\'];
$info[\'remember\'] = true;
$user_signon = wp_signon( $info, false );
if ( is_wp_error( $user_signon )) {
echo json_encode( array( \'loggedin\'=>false, \'message\'=>__( \'Wrong username or password!\' )));
} else {
echo json_encode( array( \'loggedin\'=>true, \'message\'=>__(\'Login successful, redirecting...\' )));
}
die();
}
我的
ajax-login-script.js
文件内容:
jQuery(document).ready(function($){
// Perform AJAX login on form submit
$(\'form#login_form\').on(\'#submit\', function(e){
$(\'form#login_form p.status\').show().text(ajax_login_object.loadingmessage);
$.ajax({
type: \'POST\',
dataType: \'json\',
url: ajax_login_object.ajaxurl,
data: {
\'action\': \'ajaxlogin\', //calls wp_ajax_nopriv_ajaxlogin
\'username\': $(\'form#login_form #username\').val(),
\'password\': $(\'form#login_form #password\').val(),
\'security\': $(\'form#login_form #security\').val() },
success: function(data){
$(\'form#login_form p.status\').text(data.message);
if (data.loggedin == true){
document.location.href = ajax_login_object.redirecturl;
}
}
});
e.preventDefault();
});
});
我对AJAX和JS都不熟悉,因此非常感谢您对这件事的任何解释!