Khi đăng ký tài khoản trên website Wordpress sử dụng Woocommerce bạn sẽ thấy tài khoản được tự động login đăng nhập vào luôn mà không cần xác nhận email đúng hay sai, tức là email đó có thật hay không thì đều login vào được và đặt hàng, như vậy dẫn tới 2 vấn đề là: spam đăng ký tài khoản và khi mua hàng sẽ không nhận được email đơn hàng gửi về.
>> Nếu bạn chưa biết cách bật form trên hãy tham khảo bài viết này: Bật tính năng tạo tài khoản trong Woocommerce
Vì sao cần xác nhận email đăng ký tài khoản
- Khi đăng ký tài khoản cho dù khách nhập mail không đúng, mail chưa được lập thì vẫn vào được trang tài khoản luôn, không cần phải xác nhận mail
- Cho dù bạn có cài đặt bắt buộc gửi link về mail đi chăng nữa thì khi người ta nhập thông tin đăng ký xong vẫn vào được trang tài khoản mà không cần xác nhận gì
Ví dụ: Ad thử nhập bằng mail: ttt@gmail.com
vẫn vào được trang tài khoản và mua hàng bình thường
Xác nhận email đăng ký tài khoản trên website Wordpress sử dụng Woocommerce
Cũng có khá nhiều plugin hỗ trợ đăng ký thành viên nhưng với những ai ko là tín đồ của plugin thích sài code thủ công tránh nặng web và giữ form nguyên bản thì “code thủ công xác nhận email đăng ký tài khoản” trước khi đăng nhập vào website Wordpress sử dụng Woocommerce vẫn là chân ái.
Sau đây là các bước chi tiết:
Bưới 1: cài email gửi mail SMTP
Đầu tiên các bạn cần cài gửi mail smtp nhé, nếu bạn chưa cài đặt gửi mail smtp. Còn nếu bạn đã cài mail smtp rồi thì bỏ qua bước này
>> Tham khảo: Cấu hình SMTP để gửi mail trên WordPress
Bước 2: Tạo trang Verify
Vào quản trị ==> trang ==> thêm trang mới đặt tên là “verify” sau đó chuyển sang tab “văn bản” và nhập code dưới đây vào xong nhấn đăng
<?php wc_print_notices(); ?>
Bưới 3: Code xác nhận email đăng ký tài khoản
Thêm code dưới đây vào funtion.php
của theme
hoặc child theme
hiện tại nếu bạn có child theme
// them xac nhan email vào funtion.php wiki.webchuyennghiep247.com add_filter( "um_get_option_filter__checkmail_email_on", "um_get_option_filter__checkmail_email_on_custom", 10, 1 ); function um_get_option_filter__checkmail_email_on_custom( $value ) { if( in_array( UM()->form()->form_id, array( '1234', '5678' ) )) return false; return $value; } function wc_registration_redirect( $redirect_to ) { // prevents the user from logging in automatically after registering their account wp_logout(); wp_redirect( '/verify/?n=1'); // redirects to a confirmation message exit; } function wp_authenticate_user( $userdata ) { // when the user logs in, checks whether their email is verified $has_activation_status = get_user_meta($userdata->ID, 'is_activated', false); if ($has_activation_status) { // checks if this is an older account without activation status; skips the rest of the function if it is $isActivated = get_user_meta($userdata->ID, 'is_activated', true); if ( !$isActivated ) { my_user_register( $userdata->ID ); // resends the activation mail if the account is not activated $userdata = new WP_Error( 'my_theme_confirmation_error', __( '<strong>Error:</strong> Tài khoản của bạn phải được kích hoạt trước khi bạn có thể đăng nhập. Vui lòng nhấp vào liên kết trong email kích hoạt đã được gửi cho bạn.<br /> Nếu bạn không nhận được email kích hoạt trong vòng vài phút, hãy kiểm tra thư mục thư rác hoặc <a href="/verify/?u='.$userdata->ID.'">bấm vào đây để gửi lại</a>.' ) ); } } return $userdata; } function my_user_register($user_id) { // when a user registers, sends them an email to verify their account $user_info = get_userdata($user_id); // gets user data $code = md5(time()); // creates md5 code to verify later $string = array('id'=>$user_id, 'code'=>$code); // makes it into a code to send it to user via email update_user_meta($user_id, 'is_activated', 0); // creates activation code and activation status in the database update_user_meta($user_id, 'activationcode', $code); $url = get_site_url(). '/verify/?p=' .base64_encode( serialize($string)); // creates the activation url $html = ( 'Vui lòng nhấn vào <a href="'.$url.'">đây</a> để xác minh địa chỉ email của bạn và hoàn tất quá trình đăng ký.' ); // This is the html template for your email message body wc_mail($user_info->user_email, __( 'Xác nhận tài khoản' ), $html); // sends the email to the user } function my_init(){ // handles all this verification stuff if(isset($_GET['p'])){ // If accessed via an authentification link $data = unserialize(base64_decode($_GET['p'])); $code = get_user_meta($data['id'], 'activationcode', true); $isActivated = get_user_meta($data['id'], 'is_activated', true); // checks if the account has already been activated. We're doing this to prevent someone from logging in with an outdated confirmation link if( $isActivated ) { // tạo thông báo lỗi nếu tài khoản đã hoạt động wc_add_notice( __( 'Tài khoản này đã được kích hoạt. Vui lòng đăng nhập bằng tên người dùng và mật khẩu của bạn.' ), 'error' ); } else { if($code == $data['code']){ // checks whether the decoded code given is the same as the one in the data base update_user_meta($data['id'], 'is_activated', 1); // updates the database upon successful activation $user_id = $data['id']; // logs the user in $user = get_user_by( 'id', $user_id ); if( $user ) { wp_set_current_user( $user_id, $user->user_login ); wp_set_auth_cookie( $user_id ); do_action( 'wp_login', $user->user_login, $user ); } wc_add_notice( __( '<strong>Success:</strong> Tài khoản của bạn đã được kích hoạt thành công! Bạn đã đăng nhập và bây giờ có thể sử dụng tài khoản của bạn tại trang web của chúng tôi.' ), 'notice' ); } else { wc_add_notice( __( '<strong>Error:</strong> Kích hoạt tài khoản không thành công. Vui lòng thử lại sau vài phút hoặc <a href="/verify/?u='.$userdata->ID.'">gửi lại email kích hoạt</a>.<br />Xin lưu ý rằng mọi liên kết kích hoạt đã gửi trước đó sẽ mất hiệu lực ngay khi email kích hoạt mới được gửi.<br />Nếu việc xác minh không thành công nhiều lần, vui lòng liên hệ với quản trị viên của chúng tôi.' ), 'error' ); } } } if(isset($_GET['u'])){ // If resending confirmation mail my_user_register($_GET['u']); wc_add_notice( __( 'Email kích hoạt của bạn đã được gửi lại. Vui lòng kiểm tra email và thư mục thư rác của bạn.' ), 'notice' ); } if(isset($_GET['n'])){ // If account has been freshly created wc_add_notice( __( 'Cảm ơn bạn đã tạo tài khoản . Bạn sẽ cần phải xác nhận địa chỉ mail của mình để kích hoạt tài khoản. Một mail chứa liên kết kích hoạt đã được gửi đến địa chỉ mail của bạn. Nếu email không đến trong vòng vài phút, hãy kiểm tra thư mục thư rác của bạn.' ), 'notice' ); } } // the hooks to make it all work add_action( 'init', 'my_init' ); add_filter('woocommerce_registration_redirect', 'wc_registration_redirect'); add_filter('wp_authenticate_user', 'wp_authenticate_user',10,2); add_action('user_register', 'my_user_register',10,2); // them xac nhan email vào funtion.php wiki.webchuyennghiep247.com end
Nội dung code trên sẽ:
- Đưa ra các thông báo hướng dẫn kích hoạt tài khoản
- Gửi về email đăng ký tài khoản yêu cầu xác nhận địa chỉ email để kích hoạt tài khoản
- Gửi về email đăng ký thông báo đã tạo tài khoản thành công và yêu cầu click để cập nhật mật khẩu mới
Bưới 4: Kiểm tra kết quả
- Bạn mở tab ẩn danh ==> click Đăng nhập/đăng ký ==> nhập email để đăng ký tài khoản (khác email quản trị)
- Nhận được thông báo ở trang Verify sẽ hiện thị ra dòng chữ:
Cảm ơn bạn đã tạo tài khoản. Bạn sẽ cần phải xác nhận địa chỉ mail của mình để kích hoạt tài khoản. Một mail chứa liên kết kích hoạt đã được gửi đến địa chỉ mail của bạn. Nếu email không đến trong vòng vài phút, hãy kiểm tra thư mục thư rác của bạn.
- Bạn vào hộp thư đến/thư rác check mail sẽ nhận được “email xác nhận tài khoản” như này:
- Bạn click vào để xác minh địa chỉ email và nhận được thông báo:
Success: Tài khoản của bạn đã được kích hoạt thành công! Bạn đã đăng nhập và bây giờ có thể sử dụng tài khoản của bạn tại trang web của chúng tôi.
- Bạn vào hộp thư đến/thư rác check mail sẽ nhận được email thứ 2 “tài khoản của bạn ở website đã được tạo” như này:
- Bạn Click để nhập mật khẩu mới và hoàn tất quá trình đăng ký tài khoản 😀
Chúc các bạn thành công !!! nếu có băn khoăn hãy để lại comment bên dưới nhé