8

我正在将 woocommerce 用于电子商务网站。我想在登录注册页面中再添加一个字段。在此页面上,注册中有三个字段(电子邮件、密码和重新输入密码),我想再添加一个用于电话号码的字段。

有谁能够帮我 ?在此先感谢 http://wordpress.org/plugins/woocommerce/

4

3 回答 3

10

如果其他人对如何在登录/注册/任何其他帐户表单中添加其他字段感到好奇。你可以很容易地实现这一点,因为 WooCommerce 已将这些添加到他们的模板文件夹中。您所要做的就是从plugins>woocommerce>templates>myaccount复制粘贴您需要修改的表单并将其放入您自己的主题中。之后,您可以添加额外的字段并添加任何其他功能以使它们使用http://docs.woothemes.com/document/hooks/

希望这对任何被困于此的人有所帮助。

于 2014-09-05T01:13:31.057 回答
3

我使用“Register Plus Redux”插件并使用“billing_phone”数据库键映射到用户数据库中的正确字段。您还可以让用户添加其他信息,例如“'billing_address_1”和任何其他信息。最好的问候马克

于 2013-06-19T23:56:11.970 回答
3

旧帖子,但这个答案处理了所提出的问题,并提供了 WordPress Codex 的直接答案

我已经修改了链接页面中的代码,使其与验证页面上显示的邮政编码示例内联。代码中的每一页都使用了不同的示例,我只是让它们都一样。

添加自定义字段

插件 API/操作参考/注册表单

'register_form' 动作挂钩用于自定义内置的 WordPress 注册表单。

自定义注册时与“registration_errors”(用于验证)和“register_post”(保存额外数据)结合使用。

WordPress MS 注意:对于 Wordpress MS(多站点),使用“signup_header”操作将用户重定向到注册之外。 (强调我的,我花了一段时间才意识到这一点)

例子

此示例演示如何向注册表单添加新字段。请记住,这不会自动保存。您仍然需要设置验证规则并手动处理附加表单字段的保存。

add_action( 'register_form', 'myplugin_add_registration_fields' );

function myplugin_add_registration_fields() {

    //Get and set any values already sent
    $zipcode = ( isset( $_POST['zipcode'] ) ) ? $_POST['zipcode'] : '';
    ?>

    <p>
        <label for="user_extra"><?php _e( 'Extra Field', 'myplugin_textdomain' ) ?><br />
            <input type="text" name="user_extra" id="user_extra" class="input" value="<?php echo esc_attr( stripslashes( $zipcode ) ); ?>" size="25" /></label>
    </p>

    <?php
}

链接:https ://codex.wordpress.org/Plugin_API/Action_Reference/login_form

验证

您需要验证用户输入(显然)并且应该通过registration_errors过滤器挂钩运行它。请注意,该$errors变量可能已被注册过程中的其他错误填充。与示例中一样,您会将错误添加到其中已包含的错误中。

返回错误

function myplugin_check_fields( $errors, $sanitized_user_login, $user_email ) {

    $errors->add( 'demo_error', __( '<strong>ERROR</strong>: This is a demo error.', 'my_textdomain' ) );
    return $errors;
}

add_filter( 'registration_errors', 'myplugin_check_fields', 10, 3 );

验证自定义字段

(下一节专门讨论自定义字段的验证)

假设您想要验证您已经使用 register_form 钩子创建的邮政编码字段,您可以像这样验证该字段:

function myplugin_check_fields( $errors, $sanitized_user_login, $user_email ) {

    if ( ! preg_match('/[0-9]{5}/', $_POST['zipcode'] ) ) {
        $errors->add( 'zipcode_error', __( '<strong>ERROR</strong>: Invalid Zip.', 'my_textdomain' ) );
    }

    return $errors;
}

add_filter( 'registration_errors', 'myplugin_check_fields', 10, 3 );

链接:https ://codex.wordpress.org/Plugin_API/Filter_Reference/registration_errors

最后,别忘了保存自定义字段的数据!

add_action( 'user_register', 'myplugin_registration_save', 10, 1 );

function myplugin_registration_save( $user_id ) {

if ( isset( $_POST['zipcode'] ) )
    update_user_meta($user_id, 'zipcode', $_POST['zipcode']);
}

链接:https ://codex.wordpress.org/Plugin_API/Action_Reference/user_register

一个完整的例子

在所有这一切结束时,我最终遇到了一个教程来做到这一点。在此示例中,他们正在添加一个First Name字段:

//1. Add a new form element...
add_action( 'register_form', 'myplugin_register_form' );
function myplugin_register_form() {

$first_name = ( ! empty( $_POST['first_name'] ) ) ? sanitize_text_field( $_POST['first_name'] ) : '';
    
    ?>
    <p>
        <label for="first_name"><?php _e( 'First Name', 'mydomain' ) ?><br />
            <input type="text" name="first_name" id="first_name" class="input" value="<?php echo esc_attr(  $first_name  ); ?>" size="25" /></label>
    </p>
    <?php
}

//2. Add validation. In this case, we make sure first_name is required.
add_filter( 'registration_errors', 'myplugin_registration_errors', 10, 3 );
function myplugin_registration_errors( $errors, $sanitized_user_login, $user_email ) {
    
    if ( empty( $_POST['first_name'] ) || ! empty( $_POST['first_name'] ) && trim( $_POST['first_name'] ) == '' ) {
    $errors->add( 'first_name_error', sprintf('<strong>%s</strong>: %s',__( 'ERROR', 'mydomain' ),__( 'You must include a first name.', 'mydomain' ) ) );

    }

    return $errors;
}

//3. Finally, save our extra registration user meta.
add_action( 'user_register', 'myplugin_user_register' );
function myplugin_user_register( $user_id ) {
    if ( ! empty( $_POST['first_name'] ) ) {
        update_user_meta( $user_id, 'first_name', sanitize_text_field( $_POST['first_name'] ) );
    }
}

https://codex.wordpress.org/Customizing_the_Registration_Form

于 2018-09-10T00:47:00.230 回答