覆盖 wp_includes 中的 WP 登录表单 HTML(general-template.php)

问题描述 投票:0回答:1

我想知道如何编辑 WP 登录表单的 HTML。由于我在网站中使用 WP 进行全局登录,因此我需要为客户自定义它。问题是我需要更改的代码位于核心文件夹中。最具体的是./wp_includes/general-template.php

function wp_login_form( $args = array() ) {
    $defaults = array(
        'echo'           => true,
        // Default 'redirect' value takes the user back to the request URI.
        'redirect'       => ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],
        'form_id'        => 'loginform',
        'label_username' => __( 'Username or Email Address' ),
        'label_password' => __( 'Password' ),
        'label_remember' => __( 'Remember Me' ),
        'label_log_in'   => __( 'Log In' ),
        'id_username'    => 'user_login',
        'id_password'    => 'user_pass',
        'id_remember'    => 'rememberme',
        'id_submit'      => 'wp-submit',
        'remember'       => true,
        'value_username' => '',
        // Set 'value_remember' to true to default the "Remember me" checkbox to checked.
        'value_remember' => false,
    );

    $args = wp_parse_args( $args, apply_filters( 'login_form_defaults', $defaults ) );

    $login_form_top = apply_filters( 'login_form_top', '', $args );

    $login_form_bottom = apply_filters( 'login_form_bottom', '', $args );

    /**
    * This is the code I would like to edit
    */

    $form =
        sprintf(
            '<form name="%1$s" id="%1$s" action="%2$s" method="post">',
            esc_attr( $args['form_id'] ),
            esc_url( site_url( 'wp-login.php', 'login_post' ) )
        ) .
        $login_form_top .
        sprintf(
            '<p class="login-username">
                <label for="%1$s">%2$s</label>
                <input type="text" name="log" id="%1$s" autocomplete="username" class="input" value="%3$s" size="20" />
            </p>',
            esc_attr( $args['id_username'] ),
            esc_html( $args['label_username'] ),
            esc_attr( $args['value_username'] )
        ) .
        sprintf(
            '<p class="login-password">
                <label for="%1$s">%2$s</label>
                <input type="password" name="pwd" id="%1$s" autocomplete="current-password" spellcheck="false" class="input" value="" size="20" />
            </p>',
            esc_attr( $args['id_password'] ),
            esc_html( $args['label_password'] )
        ) .
        $login_form_middle .
        ( $args['remember'] ?
            sprintf(
                '<p class="login-remember"><label><input name="rememberme" type="checkbox" id="%1$s" value="forever"%2$s /> %3$s</label></p>',
                esc_attr( $args['id_remember'] ),
                ( $args['value_remember'] ? ' checked="checked"' : '' ),
                esc_html( $args['label_remember'] )
            ) : ''
        ) .
        sprintf(
            '<p class="login-submit">
                <input type="submit" name="wp-submit" id="%1$s" class="button button-primary" value="%2$s" />
                <input type="hidden" name="redirect_to" value="%3$s" />
            </p>',
            esc_attr( $args['id_submit'] ),
            esc_attr( $args['label_log_in'] ),
            esc_url( $args['redirect'] )
        ) .
        $login_form_bottom .
        '</form>';

    if ( $args['echo'] ) {
        echo $form;
    } else {
        return $form;
    }
}

然后,使用 wp_login_form() 函数从插件生成登录表单:

function pmpro_login_form( $args = array() ) {
    add_filter( 'login_form_top', 'pmpro_login_form_hidden_field' );
    wp_login_form( $args );
    remove_filter( 'login_form_top', 'pmpro_login_form_hidden_field' );
}

第一种方法是使用 CSS 和 JS 编辑表单的外观。不过,我可以通过编辑 HTML 来提高效率。

其次,我显然可以编辑 wp_includes 中的源代码核心,但我认为这不是一个有效的方法。此外,进一步的更新将重置内容。所以,主要问题是哪个是覆盖默认 $form 常量的最佳方法。

php wordpress wordpress-theming
1个回答
0
投票

我认为除了使用钩子/过滤器和 CSS 之外,没有“更好”的方法来编辑本机 wp-login 表单。

我相信最好考虑从头开始创建自定义登录表单,然后:

  • 在不同页面上显示自定义登录表单

  • 使用以下命令将 wp-login 模板替换为您的自定义登录表单 template_include 过滤器

  • 使用 login_init 从 wp-login 重定向到您的模板 钩子(如果你也想替换

    /wp-login

WordPress codex 上也有一个关于此的主题。

© www.soinside.com 2019 - 2024. All rights reserved.