在 Woocommerce 结帐表单中启用确认密码

Enable confirmation password in Woocommerce checkout form

我在 Woocommerce 设置中启用了 'Enable customer registration on the "Checkout" page' 这个选项。新客户在下订单时在网站上注册。没有其他注册方式。

https://dev.clipcertification.com/checkout/

下订单时,有一个密码字段。 我想要 'Confirm Password',我尝试在主题的 functions.php filr 中使用以下代码,但没有显示确认密码字段。

<?php
// place the following code in your theme's functions.php file
// Add a second password field to the checkout page.
add_action( 'woocommerce_checkout_init', 'wc_add_confirm_password_checkout', 10, 1 );
function wc_add_confirm_password_checkout( $checkout ) {
if ( get_option( 'woocommerce_registration_generate_password' ) == 'no' ) {
    $checkout->checkout_fields['account']['account_password2'] = array(
        'type'              => 'password',
        'label'             => __( 'Confirm password', 'woocommerce' ),
        'required'          => true,
        'placeholder'       => _x( 'Confirm Password', 'placeholder', 'woocommerce' )
    );
}
}
// Check the password and confirm password fields match before allow checkout 
to proceed.
add_action( 'woocommerce_after_checkout_validation', 
'wc_check_confirm_password_matches_checkout', 10, 2 );
function wc_check_confirm_password_matches_checkout( $posted ) {
$checkout = WC()->checkout;
if ( ! is_user_logged_in() && ( $checkout->must_create_account || ! empty( 
$posted['createaccount'] ) ) ) {
if ( strcmp( $posted['account_password'], $posted['account_password2'] ) !== 
0 ) {
wc_add_notice( __( 'Passwords do not match.', 'woocommerce' ), 'error' );
    }
}
}
?>

假设 "customer registration" 选项已**在 "Checkout" 页面上启用客户注册”,您可以尝试类似的以下操作:

add_filter( 'woocommerce_checkout_fields' , 'add_confirm_password_checkout_field', 10, 1 );
function add_confirm_password_checkout_field( $fields ) {
    if ( get_option( 'woocommerce_registration_generate_password' ) != 'no' )
        return $fields;

    $fields['account']['account_password']['class'] = array('form-row-first');
    $fields['account']['account_password-2'] = array(
        'type' => 'password',
        'label' => __( 'Password confirmation', 'woocommerce' ),
        'required'          => true,
        'placeholder' => _x('Confirmation', 'placeholder', 'woocommerce'),
        'class' => array('form-row-last'),
        'label_class' => array('hidden')
    );
    return $fields;
}

add_action( 'woocommerce_checkout_process', 'confirm_password_checkout_validation' );
function confirm_password_checkout_validation() {
    if ( ! is_user_logged_in() && ( WC()->checkout->must_create_account || ! empty( $_POST['createaccount'] ) ) ) {
        if ( strcmp( $_POST['account_password'], $_POST['account_password-2'] ) !== 0 )
            wc_add_notice( __( "Passwords doesn’t match.", "woocommerce" ), 'error' );
    }
}

代码进入您的活动子主题(或活动主题)的 function.php 文件。

已测试并有效。


你会得到类似的东西:

Now if you don't get the field try to remove or to comment this lines in the first hooked function:

 if ( get_option( 'woocommerce_registration_generate_password' ) != 'no' )
        return $fields;

This issue could be related to your theme or others plugin customizations.