# Chia sẻ cách để mỗi số điện thoại, email chỉ được đăng ký một lần duy nhất khi dùng Contact Form 7 (

## Chia sẻ cách để mỗi số điện thoại, email chỉ được đăng ký một lần duy nhất khi dùng Contact Form 7 (CF7)

Cập nhật lần cuối 08/04/2024 by [Mr Toản](https://levantoan.com/author/mr-toan/) trong [WordPress](https://levantoan.com/category/wordpress/) vào 08/04/2024 có 140 Views**Có thể bạn quan tâm**

* [The\_excerpt thay đổi độ dài chữ và biểu tưởng readmore](https://levantoan.com/the_excerpt-thay-doi-do-dai-chu-va-bieu-tuong-readmore/)
* [Thay đổi kích thước ảnh thumbnail trong wordpress gallery](https://levantoan.com/thay-doi-kich-thuoc-anh-thumbnail-trong-wordpress-gallery/)
* [Giới hạn độ dài tiêu đề bài viết trong wordpress khi dùng hàm the\_title()](https://levantoan.com/gioi-han-do-dai-tieu-de-bai-viet-trong-wordpress-khi-dung-ham-the_title/)
* [Remove dashboard widget API](https://levantoan.com/remove-dashboard-widget-api/)
* [Chèn quảng cáo vào giữa bài viết trong wordpress](https://levantoan.com/chen-quang-cao-vao-giua-bai-viet-trong-wordpress/)

**Yêu cầu:** Trong một dự án gần đây khách có yêu cầu form đăng ký trải nghiệm, mỗi SĐT hay Email chỉ được đăng ký 1 lần duy nhất. Nếu khách đã đăng ký rồi thì thông báo cho khách biết và không cho submit form nữa

<figure><img src="https://levantoan.com/wp-content/uploads/2024/04/435569369_7305502356215038_4414608720682119096_n.jpg" alt="" height="547" width="596"><figcaption></figcaption></figure>

**Hướng giải quyết:** Mình sẽ cần lưu các đăng ký vào sql, sau đó mỗi khi có submit sẽ hook vào **wpcf7\_validate** để kiểm tra xem sđt hoặc email đó đã đăng ký hay chưa và đưa ra thông báo phù hợp

**Cách làm như sau**

Để duy trì blog nên mình có làm aff cho 1 số bên hosting. Nhưng dù aff mình cũng chọn 1 số nhà cung cấp uy tín về chất lượng và support nên các bạn cứ yên tâm nhé.

Nếu có mua hosting mà có trong list dưới đây các bạn click vào link trước khi mua để ủng hộ mình nhé. Mình cảm ơn nhiều

* Azdigi: Giá rẻ thì dùng gói [Pro Gold Hosting](https://levantoan.com/go/azdigi-pro-gold-hosting/) còn chất lượng hơn thì em khuyên dùng [Business Hosting](https://levantoan.com/go/azdigi-business-hosting/). Có điều kiện thì lên [VPS](https://levantoan.com/go/platinum-vps/) nhé
* [Tino hosting](https://levantoan.com/go/tino-hosting/)
* [iNet](https://levantoan.com/go/inet-hosting/)
* Nước ngoài thì [Vultr](https://levantoan.com/go/vultr/)

### Lưu dữ liệu mỗi khi có khách submit trong CF7

Để lưu dữ liệu mình sẽ cần code rất nhiều, nên mình sẽ sử dụng plugin “[Contact Form 7 Database Addon – CFDB7](https://wordpress.org/plugins/contact-form-cfdb7/)” cho nhanh nhé. Plugin này cũng khá hay

Để cài plugin này bạn hãy vào menu **Plugin > Thêm mới**. Sau đó tìm tên **Contact Form 7 Database Addon – CFDB7** và cài đặt > kích hoạt

### Cách xác định SĐT hoặc Email đã đăng ký hay chưa

Sau khi cài xong plugin. Bạn chỉ cần thêm code sau vào **wp-content/themes/{your-theme}/functions.php** là được nhé. Code được chia sẻ trên levantoan.com

Kho plugin của tôi[![DevVN Woocommerce Reviews](https://levantoan.com/wp-content/uploads/2019/08/aaa-face-ads-3.png)](https://levantoan.com/san-pham/devvn-woocommerce-reviews/)[DevVN Woocommerce Reviews](https://levantoan.com/san-pham/devvn-woocommerce-reviews/)[![Plugin mua hàng nhanh cho woocommerce – Woocommerce Quick buy](https://levantoan.com/wp-content/uploads/2017/12/52605418_1289812654492997_4156954964393984000_n.png)](https://levantoan.com/san-pham/plugin-mua-hang-nhanh-cho-woocommerce-woocommerce-quick-buy/)[Plugin mua hàng nhanh cho woocommerce – Woocommerce Quick buy](https://levantoan.com/san-pham/plugin-mua-hang-nhanh-cho-woocommerce-woocommerce-quick-buy/)[![Plugin kết nối giao hàng tiết kiệm với Woocommerce – GHTK vs Woocommerce](https://levantoan.com/wp-content/uploads/2018/02/ghtk_woo.png)](https://levantoan.com/san-pham/plugin-ket-noi-giao-hang-tiet-kiem-voi-woocommerce-ghtk-vs-woocommerce/)[Plugin kết nối giao hàng tiết kiệm với Woocommerce – GHTK vs Woocommerce](https://levantoan.com/san-pham/plugin-ket-noi-giao-hang-tiet-kiem-voi-woocommerce-ghtk-vs-woocommerce/)[![Plugin Kết nối Zalo OA với WordPress](https://levantoan.com/wp-content/uploads/2023/06/zalo-oa.png)](https://levantoan.com/san-pham/plugin-ket-noi-zalo-oa-voi-wordpress/)[Plugin Kết nối Zalo OA với WordPress](https://levantoan.com/san-pham/plugin-ket-noi-zalo-oa-voi-wordpress/)

```
/*
* Code giới hạn sđt hoặc email chỉ được đăng ký 1 lần duy nhất trong CF7
* Author: levantoan.com
*/
function devvn_litmit_by_phone_email_validation($result, $tags) {
    global $wpdb;
    $cfdb = apply_filters('cfdb7_database', $wpdb);
    $table_name = $cfdb->prefix . 'db7_forms';
    $_wpcf7 = isset($_POST['_wpcf7']) && $_POST['_wpcf7'] ? intval($_POST['_wpcf7']) : '';
    if($_wpcf7) {
        foreach ($tags as $tag) {
            if (in_array($tag['type'], array('tel', 'tel*')) && $tag['name'] == 'your-phone') {
                $value = isset($_POST[$tag['name']]) && $_POST[$tag['name']] ? sanitize_text_field(wp_unslash($_POST[$tag['name']])) : '';
                if ($value) {
                    $results = $cfdb->get_results(
                        $cfdb->prepare(
                            "SELECT form_id FROM $table_name WHERE form_post_id = $_wpcf7 AND form_value LIKE %s LIMIT 1",
                            '%' . $cfdb->esc_like( $tag['name'] . '";s:' . strlen( $value ) . ':"' . $value . '"' ) . '%'
                        )
                    );
                    if (!empty($results)) {
                        $result->invalidate($tag, 'Số điện thoại của bạn đã đăng ký rồi!');
                    }
                }
            }
            if (in_array($tag['type'], array('email', 'email*')) && $tag['name'] == 'your-email') {
                $value = isset($_POST[$tag['name']]) && $_POST[$tag['name']] ? sanitize_text_field(wp_unslash($_POST[$tag['name']])) : '';
                if ($value) {
                    $results = $cfdb->get_results(
                        $cfdb->prepare(
                            "SELECT form_id FROM $table_name WHERE form_post_id = $_wpcf7 AND form_value LIKE %s LIMIT 1",
                            '%' . $cfdb->esc_like( $tag['name'] . '";s:' . strlen( $value ) . ':"' . $value . '"' ) . '%'
                        )
                    );
                    if (!empty($results)) {
                        $result->invalidate($tag, 'Email của bạn đã đăng ký rồi!');
                    }
                }
            }
        }
    }
    return $result;
}
add_filter('wpcf7_validate', 'devvn_litmit_by_phone_email_validation', 10, 2);
```

**Chú ý**: Các giá trị trong form như sau

* Đoạn code trên sẽ hoạt động trên tất cả các form cf7
* Trường tel hoặc tel\* với name là your-phone . Ví dụ \[tel\* your-phone placeholder “Số điện thoại”]
* Trường email hoặc email\* có name là your-email. Ví dụ \[email\* your-email placeholder “Email”]

Chúc các bạn thành công!
