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

时间:2018-01-09 12:35:50

标签: php wordpress woocommerce passwords checkout

我已启用'在" Checkout"上启用客户注册网页' Woocommerce设置中的此选项。新客户在下订单时在网站上注册。没有其他注册手段。

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

下订单时,有一个密码字段。 我想要确认密码',我尝试在主题的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' );
    }
}
}
?>

1 个答案:

答案 0 :(得分:2)

假设&#34;客户注册&#34;选项是**在&#34; Checkout&#34;上启用了客户注册。页面&#34;,您可以尝试类似的以下内容:

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文件中。

经过测试和工作。

你会得到类似的东西:

enter image description here

  

现在,如果你没有得到该字段,请尝试删除或在第一个挂钩函数中注释这一行:

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

此问题可能与您的主题或其他插件自定义有关。