Reputation: 325
I have enabled 'Enable customer registration on the "Checkout" page' this option in Woocommerce settings. New customer gets registered on website while placing order. There is no other means of registration.
https://dev.clipcertification.com/checkout/
While placing order, there is a field for password. I want to have 'Confirm Password', I tried using following code in theme's functions.php filr, but Confirm Password field do not show up.
<?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' );
}
}
}
?>
Upvotes: 3
Views: 7972
Reputation: 253968
Assuming that the "customer registration" option is **Enabled for customer registration on the "Checkout" page", you could try the similar following:
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' );
}
}
Code goes in function.php file of your active child theme (or active theme).
Tested and works.
You will get something like:
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.
Upvotes: 4