如何在WooCommerce注册页面添加确认密码字段?

时间:2016-05-30 09:18:52

标签: wordpress

我试图添加代码

<?php
// Add the code below to your theme's functions.php file to add a confirm password field on the register form under My Accounts.
add_filter('woocommerce_registration_errors', 'registration_errors_validation', 10,3);
function registration_errors_validation($reg_errors, $sanitized_user_login, $user_email) {
    global $woocommerce;
    extract( $_POST );
    if ( strcmp( $password, $password2 ) !== 0 ) {
        return new WP_Error( 'registration-error', __( 'Passwords do not match.', 'woocommerce' ) );
    }
    return $reg_errors;
}
add_action( 'woocommerce_register_form', 'wc_register_form_password_repeat' );
function wc_register_form_password_repeat() {
    ?>
    <p class="form-row form-row-wide">
        <label for="reg_password2"><?php _e( 'Password Repeat', 'woocommerce' ); ?> <span class="required">*</span></label>
        <input type="password" class="input-text" name="password2" id="reg_password2" value="<?php if ( ! empty( $_POST['password2'] ) ) echo esc_attr( $_POST['password2'] ); ?>" />
    </p>
    <?php
}
?>

关于function.php但不能正常工作...有关如何在woocommerce / myaccout / form-login.php上添加密码确认字段

5 个答案:

答案 0 :(得分:4)

作为John's answer的后续行动:

挂钩 //Declare the factory and the connection pool, usually at the application startup SmtpConnectionPool smtpConnectionPool = new SmtpConnectionPool(SmtpConnectionFactoryBuilder.newSmtpBuilder().build()); //borrow an object in a try-with-resource statement or call `close` by yourself try (ClosableSmtpConnection transport = smtpConnectionPool.borrowObject()) { MimeMessage mimeMessage = new MimeMessage(transport.getSession()); MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, false); mimeMessageHelper.addTo("to@example.com"); mimeMessageHelper.setFrom("from@example.com"); mimeMessageHelper.setSubject("Hi!"); mimeMessageHelper.setText("Hello World!", false); transport.sendMessage(mimeMessage); } //Close the pool, usually when the application shutdown smtpConnectionPool.close(); 不再适用于Woocommerce 3.x,因为他们引入了一个只会返回原始woocommerce_checkout_init字段的魔法吸气剂,而不会$checkout->checkout_fields['account']。我不知道这是一个功能还是一个bug。

对于Woocommerce 3.x,正确的方法是使用过滤器。验证保持不变。

account2

答案 1 :(得分:2)

在你的function.php中你可以这样做:

// 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' );
        }
    }
}

答案 2 :(得分:1)

$id = $this_assignment['id'];
$title = $this_assignment['title'];
$url = "/assignments/$type/";

$html_id = htmlspecialchars($id, ENT_QUOTES);
$html_title = htmlspecialchars($title, ENT_QUOTES);
$html_url = htmlspecialchars($url, ENT_QUOTES);
?>
<li>
    <a href="<?php echo $html_url; ?>" data-title="<?php echo $html_title; ?>" data-id="<?php echo $html_id; ?>">
        <i class="fa fa-copy"></i>
        Duplicate assignment
    </a>
<li>
<!-- and later -->
<script>
    document.querySelector("a").addEventListener("click", duplicate_assignment_handler);

    function duplicate_assignment_handler(e) {
        e.preventDefault();
        a4e.duplicate_assignment(this.dataset.id, this.dataset.title, this.href);
    }
</script>
</script>
  

来源:you can find this code here i test before on my website

答案 3 :(得分:0)

下面两种方法一种用于结帐,第二种方法用于我的帐户,我提到了两个代码

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' );
        }
    }
}

add_filter('woocommerce_registration_errors', 'registration_errors_validation', 10,3);
function registration_errors_validation($reg_errors, $sanitized_user_login, $user_email) {
    global $woocommerce;
    extract( $_POST );
    if ( strcmp( $password, $password2 ) !== 0 ) {
        return new WP_Error( 'registration-error', __( 'Passwords do not match.', 'woocommerce' ) );
    }
    return $reg_errors;
}

我的帐户页面

add_action( 'woocommerce_register_form', 'wc_register_form_password_repeat' );
function wc_register_form_password_repeat() {
    ?>
    <p class="form-row form-row-wide">
        <label for="reg_password2"><?php _e( 'Password Repeat', 'woocommerce' ); ?> <span class="required">*</span></label>
        <input type="password" class="input-text" name="password2" id="reg_password2" value="<?php if ( ! empty( $_POST['password2'] ) ) echo esc_attr( $_POST['password2'] ); ?>" />
    </p>
    <?php
}

答案 4 :(得分:0)

经过大量的努力,终于按照我的要求对以下代码进行了一些修改,以便在我的帐户页面上显示“确认密码”。请在functions.php中尝试以下代码

// Add the code below to your theme's functions.php file to add a confirm password field on the register form under My Accounts.
add_filter('woocommerce_registration_errors', 'registration_errors_validation', 10,3);
function registration_errors_validation($reg_errors, $sanitized_user_login, $user_email) {
    global $woocommerce;
    extract( $_POST );
    if ( strcmp( $password, $password2 ) !== 0 ) {
        return new WP_Error( 'registration-error', __( 'Passwords do not match.', 'woocommerce' ) );
    }
    return $reg_errors;
}
add_action( 'woocommerce_register_form', 'wc_register_form_password_repeat' );
function wc_register_form_password_repeat() {
    ?>
    <div class="form-row form-row-wide  addtafterpassword" style=" margin-top: 20px;    margin-bottom: 0;">
        <label for="reg_password2"><?php _e( 'Password Repeat', 'woocommerce' ); ?> <span class="required">*</span></label>
        <input type="password" class="input-text" name="password2" id="reg_password2" value="<?php if ( ! empty( $_POST['password2'] ) ) echo esc_attr( $_POST['password2'] ); ?>" />
    </div>
    <?php
}
?>