2011-11-05 60 views
8

我有我的网站前端工作的WordPress登录表单,允​​许我的用户登录而无需访问wp-login.php或离开“主题”或网站。在jQuery Popup中登录WordPress - 如何验证jQuery Ajax登录?

如果您转到http://westendmediacentre.com/dev并单击登录,您可以看到我的表单出现在jQuery弹出窗口中。我给这家代码如下:

表格代号:

<div class="login-form"> 
     <form action="<?php echo get_option('home'); ?>/wp-login.php" method="post"> 
     <input type="text" name="log" id="log" value="Username<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" size="20" class="login-fields" onclick="this.value='';" onblur="this.value=!this.value?'Username':this.value;"/> 
     <input type="password" name="pwd" id="pwd" value="Password" size="20" class="login-fields" onclick="this.value='';" onblur="this.value=!this.value?'Password':this.value;"/> 
     <input type="submit" name="submit" value="Login" class="login-button" /> 
     <input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>" /> 
     </form> 
</div> 

的jQuery:

$('.button-login').click(function() { 
    $('.login-box').fadeIn('slow', function() { 
    // Animation complete 
    }); 
    $(".login-box").css({'z-index' : '10000'}); 
    $("#the-lights").css({'display' : 'block'}); 
    $("#the-lights").css({'z-index' : '1'}); 
    $("#the-lights").fadeTo("slow",0.7); 
}); 
$('.login-box-close').click(function() { 
    $('.login-box').fadeOut('fast', function() { 
    // Animation complete 
    }); 
    $("#the-lights").fadeTo("slow",0); 
    $("#the-lights").css({'display' : 'none'}); 
}); 

这完美的作品,但是,如果你尝试用一些不好的凭据登录,你再 - 导向到一个WordPress页面给你的错误。

我想要做的是,这些错误出现在我的jQuery弹出窗口中,以便当您尝试使用错误凭据登录时,它会在窗体上方或下方提供错误消息,而不是重新指向另一个窗体页面显示那里的错误。

我尝试下面这个教程,但它没有正确使用我现有的代码工作:http://www.tutorialstag.com/custom-wordpress-login-without-using-a-plugin.html

将不胜感激,如果有人可以张贴一个可行的解决方案

+0

您不通过Ajax发布您的登录信息。您只需发布到login.php。引用的教程是使用ajax发布登录的正确方法。 –

+0

当我试图在教程的空白页面上使用本教程时,我可以正确使用它。但是当我尝试将其与现有代码集成时,我遇到了问题。登录时,它会在“results”div中的jQuery弹出窗口中重新加载整个页面,而不仅仅是结果。我需要的只是当出现错误时,它在结果div中表示,并且在其成功时将其重定向到页面。我怎样才能做到这一点? –

+0

这个问题应该去http://wordpress.stackexchange.com/ –

回答

1

这是所有关于wordperess'结构,首先所有你应该知道,即使你提供正确或错误的登录凭据,你的结构将用户重定向到wp-login.php(因为)
< ?php echo get_option('home'); ?>/wp-login.php line(我的意思是你只是发布你的用户名和密码到wp-login.php)
然后,如果提供的信息是正确的,那么wordpress再次重定向使用r到主页,否则显示错误(带有抖动效果),您可以在wp-login.php文件中找到所有这些操作。
您可以使用两种不同的选项。

  • 你能砍像
    WP-login.php中的文件,如果用户didnt供应正确的用户名/密码,然后让他重定向到http://www.westendmediacentre.com/dev/
  • 你可以使用Ajax验证(我的意思是,你准备从数据库的数据库连接的PHP文件和检索的用户名和密码,并发送回结果你的登录系统)

如果选择第二种方式构建自己的登录机制,可以控制this后。这非常有用。

0

如果可能,请勿编辑任何核心文件。 你会后悔的。

如果你写一个插件和插件正在处理您的jQuery弹出 - 那么你可以这样做:

要登录表单,你可以看看这个插件: http://wordpress.org/extend/plugins/sidebar-login/

然后您只需在AJAX脚本将发布的PHP文件中包含大部分逻辑。如果登录失败,PHP文件返回的数据将发送到您的AJAX脚本,您会很好。

0

你缺少这部分的教程

$("#submitbtn").click(function() { 

    $('#result').html('<img src="<?php bloginfo(' 
    template_url '); ?>/images/loader.gif" class="loader" />').fadeIn(); 
    var input_data = $('#wp_login_form').serialize(); 
    $.ajax({ 
     type: "POST", 
     url: "<?php echo " 
     http: //" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>", 
     data: input_data, 
     success: function(msg) { 
      $('.loader').remove(); 
      $(' 
<div>').html(msg).appendTo('div#result').hide().fadeIn('slow'); 
     } 
    }); 
    return false; 

});