正确定制登录/注册表单

时间:2013-02-10 作者:He Shiming

我正在为WordPress定制一个登录表单。我注意到要实现我想要的是相当困难的。

以下是表单的HTML:

<form method="post" action="<?php bloginfo(\'url\') ?>/wp-login.php">
    <div class="loginbox_fields">
        <div class="loginbox_field"><input type="text" name="log" id="user_login"  value="" placeholder="<?php _e(\'Username\'); ?>"/></div>
        <div class="loginbox_field"><input type="password" name="pwd" id="user_pass" value="" placeholder="<?php _e(\'Password\'); ?>"/></div>
        <div class="loginbox_text">
            <input name="rememberme" type="checkbox" id="rememberme" value="forever"  <?php checked( $rememberme ); ?> />
            <label for="remember"><?php esc_attr_e(\'Remember Me\'); ?></label>
        </div>
        <a href="/nojs.html" class="loginbox_button form_submit" title="<?php esc_attr_e(\'Log In\'); ?>"><?php esc_attr_e(\'Log In\'); ?></a>
        <table>
            <tr>
                <td class="first_column">Not registered?</td>
                <td></td>
                <td>Forgot password?</td>
            </tr>
            <tr>
                <td class="first_column"><a href="<?php echo get_permalink(); ?>?action=register" class="loginbox_stdbutton" title="Register">Register</a></td>
                <td></td>
                <td><a href="<?php echo get_permalink(); ?>?action=lostpassword" class="loginbox_stdbutton" title="Reset Password">Reset Password</a></td>
            </tr>
        </table>
    </div>
</form>
由于款式要求,我把div 环绕input 框和提交按钮是锚定标记。根据the document, wp_login_form 它的挂钩将无法实现这种设计。

所以我按照这个问题的建议(我问)Custom user profile, registration, login page with theme , 还有一些接近http://digwp.com/2010/12/login-register-password-code/ . 基本上,它允许您将登录表单放在任何您想要的地方,但仍然指向wp-login.php 提交时。

但它有一个主要缺陷。当登录不正确时,它会指示您返回wp-login.php. 像这样demo, 如果单击“登录”而不输入任何内容,则会返回默认值wp-login.php 类型

我目前正在将上述表单放在一个自定义页面中。我挂了一个过滤器template_include 并使用此HTML代码作为登录表单。我只是想改变风格,我不打算添加功能。

实现这种登录表单设计需要什么?我应该从wp登录开始吗。php和更改它?如果是,我该如何开始(在主题和形式方面)?

1 个回复
最合适的回答,由SO网友:david.binda 整理而成

要在登录失败后重定向回自定义登录表单,请尝试以下代码:

// hook failed login
add_action(\'wp_login_failed\', \'my_front_end_login_fail\'); 

function my_front_end_login_fail($username){
    // Get the reffering page, where did the post submission come from?
    $referrer = add_query_arg(\'login\', false, $_SERVER[\'HTTP_REFERER\']);

    // if there\'s a valid referrer, and it\'s not the default log-in screen
    if(!empty($referrer) && !strstr($referrer,\'wp-login\') && !strstr($referrer,\'wp-admin\')){
        // let\'s append some information (login=failed) to the URL for the theme to use
        wp_redirect($referrer . \'?login=failed\'); 
    exit;
    }
}
您还必须检查密码或登录是否为空-当前端的登录表单(您的自定义登录表单)提交为空时,您将使用标准wp登录。再次使用php。要防止出现这种情况,请附加以下代码:

add_action( \'login_head\', \'my_frontend_login_no_pass_no_username\' );

function my_frontend_login_no_pass_no_username(){
    $referrer = add_query_arg(\'login\', false, $_SERVER[\'HTTP_REFERER\']);
    if ( (!isset($_REQUEST[\'user_login\']) || ( isset( $_REQUEST[\'user_login\'] ) && trim( $_REQUEST[\'user_login\'] ) == \'\' ) ) || (!isset($_REQUEST[\'user_pass\']) || ( isset( $_REQUEST[\'user_pass\'] ) && trim( $_REQUEST[\'user_pass\'] ) == \'\' ) ) ){
        wp_redirect( add_query_arg(\'login\', \'failed\', $referrer) ); 
        exit; 
    }   
}
如果您对注册失败后的正确登录感兴趣,请检查我的blogpost on this topic.

结束

相关推荐

修改wp-login.php标签:用户名为电子邮件

如何编辑wp-login.php 类型我使用电子邮件登录,所以我需要更改username 到email.这里的答案似乎过时了,或者与SSL或其他东西不兼容:Function to change a label (Username) in a core WordPress File (wp-includes/general-template.php) 我在函数文件中尝试了此操作,但没有成功:function wpse60605_change_username_label( $defaults ) {