2026年11月12日
2026年11月12日
Cách dùng Gravity Forms: biểu mẫu, logic điều kiện, email thông báo
Đây là phiên bản được bản địa hóa từ bài viết gốc tiếng Nhật. Đọc bài gốc tiếng Nhật
Gravity Forms là plugin biểu mẫu trả phí, không được phát hành trên WordPress.org. Từ trang quản trị, bạn có thể thiết lập "logic điều kiện" để hiện hoặc ẩn các trường tùy điều kiện, phân phối nơi nhận thông báo theo nội dung gửi, lưu dữ liệu gửi (entry) vào cơ sở dữ liệu và xuất ra. Bài viết này giải thích cách tạo biểu mẫu cơ bản và cách dùng hook dành cho lập trình viên. Nội dung giấy phép và tên các mục trên màn hình là nội dung đã đối chiếu với trang chính thức và tài liệu (tiếng Anh) của Gravity Forms vào tháng 11/2026. Màn hình được viết theo tên mục tiếng Anh. Nếu bạn đang hiển thị bằng ngôn ngữ khác, cách ghi có thể khác.
Giấy phép và các add-on dùng được
Tùy giấy phép mà số site và add-on dùng được sẽ khác nhau.
| Giấy phép | Số site | Add-on chính |
|---|---|---|
| Basic | 1 | Các add-on cơ bản như Mailchimp, HubSpot, reCAPTCHA |
| Pro | 3 | Ngoài nội dung của Basic còn có Stripe, PayPal Checkout, Square, Zapier, Slack, v.v. |
| Elite | Không giới hạn | Tất cả add-on (Webhooks, User Registration, Signature, Survey, v.v.). Hỗ trợ cả multisite |
Add-on Webhooks gửi dữ liệu đã gửi đến hệ thống bên ngoài chỉ dùng được với Elite (và giấy phép dành cho tổ chức phi lợi nhuận). Stripe và PayPal Checkout để thanh toán thì từ Pro trở lên. Trước khi mua, hãy kiểm tra trên trang giá chính thức xem add-on cần thiết nằm trong giấy phép nào.
Cài đặt và đăng ký khóa giấy phép
Tải tệp ZIP của plugin từ trang tài khoản trên site chính thức của Gravity Forms, rồi cài đặt và kích hoạt bằng "Plugin → Cài mới → Tải plugin lên" (Plugins → Add New → Upload Plugin). Nếu dùng WP-CLI thì như sau.
wp plugin install /path/to/gravityforms.zip --activate
Khóa giấy phép được nhập ở màn hình "Forms → Settings". Khi phân phối cùng một thiết lập cho nhiều môi trường, cũng có cách ghi nó dưới dạng hằng số trong wp-config.php. Khi viết hằng số, ô khóa giấy phép trên màn hình thiết lập sẽ hiển thị ở trạng thái không sửa được.
define( 'GF_LICENSE_KEY', 'YOUR-LICENSE-KEY-HERE' );
Tạo biểu mẫu và đặt lên trang
- Mở "Forms → New Form" trong trang quản trị, đặt tên biểu mẫu rồi tạo.
- Từ "Add Fields" ở bên phải, đặt các trường như tên (Name), địa chỉ email (Email), số điện thoại (Phone), lựa chọn (Drop Down), nội dung (Paragraph Text), đồng ý (Consent).
- Nhấp vào từng trường để mở thiết lập. Với mục bắt buộc, hãy bật "Required".
- Lưu bằng "Save Form".
Để đặt biểu mẫu lên trang, hãy thêm block "Gravity Forms" trong block editor và chọn biểu mẫu đã tạo. Nếu đặt bằng shortcode thì viết theo dạng sau, trong đó id là ID của biểu mẫu hiển thị trong danh sách biểu mẫu.
[gravityform id="1" title="false"]
Hiện hoặc ẩn trường bằng logic điều kiện
Việc hiện hoặc ẩn như "chỉ hiện ô tải lý lịch lên khi loại liên hệ là 'về tuyển dụng'" được thiết lập bằng logic điều kiện (Conditional Logic).
- Trong trình soạn biểu mẫu, nhấp vào trường bạn muốn hiện hoặc ẩn (ví dụ: trường tải tệp lý lịch).
- Mở "Conditional Logic" trong thiết lập của trường và bật "Enable Conditional Logic".
- Chọn "Show (hiển thị)" hoặc "Hide (ẩn)", và chọn điều kiện là "All (thỏa tất cả)" hoặc "Any (thỏa một trong)".
- Ở dòng điều kiện, chọn trường gốc (loại liên hệ), phép so sánh (is) và giá trị (về tuyển dụng). Bạn có thể thêm điều kiện bằng dấu cộng bên cạnh dòng.
Email thông báo và thông báo xác nhận cũng có thể được thiết lập logic điều kiện riêng.
Thiết lập email thông báo
Email thông báo được thiết lập ở "Forms → biểu mẫu đích → Form Settings → Notifications". Khi tạo biểu mẫu, đã có sẵn một thông báo gửi cho quản trị viên. Dùng "Add New" để thêm các thông báo như trả lời tự động.
| Mục | Nội dung |
|---|---|
| Send To | Nơi nhận. "Enter Email" là địa chỉ cố định, "Select a Field" là trường email của biểu mẫu, "Configure Routing" là phân phối nơi nhận theo nội dung được nhập |
| From Email | Người gửi. {admin_email} (địa chỉ email quản trị trong "Cài đặt → Chung" / Settings → General của WordPress) hoặc địa chỉ cố định |
| Reply To | Nơi nhận trả lời. Với thông báo gửi cho quản trị viên, nếu đặt merge tag của trường email của người liên hệ thì sẽ dễ trả lời hơn |
| Subject / Message | Tiêu đề và nội dung. Có thể chèn nội dung đã nhập bằng merge tag |
Merge tag là ký hiệu để chèn giá trị đã gửi. Giá trị của trường có dạng {Nhãn:ID_trường} (ví dụ: {Name:1}, cũng có thể bỏ nhãn và viết {:1}), còn {all_fields} chèn toàn bộ nội dung đã nhập dưới dạng bảng. Nếu chọn từ nút merge tag ở góc trên bên phải ô nội dung, bạn có thể nhập mà không cần tra ID trường.
Nếu địa chỉ người gửi là địa chỉ cùng tên miền với site, email ít bị coi là thư rác hơn. Hãy tránh dùng địa chỉ email của người liên hệ làm người gửi, mà hãy đặt vào Reply To.
Thông báo xác nhận sau khi gửi
Nội dung hiển thị sau khi gửi được thiết lập ở "Form Settings → Confirmations". Có 3 loại sau.
- Text: hiển thị thông báo tại vị trí của biểu mẫu (mặc định)
- Page: chuyển đến một trang tĩnh trong site
- Redirect: chuyển đến URL được chỉ định
Nếu bạn chuẩn bị trang hoàn tất gửi để dùng cho đo lường quảng cáo hoặc phân tích truy cập, hãy chọn Page hoặc Redirect.
Thêm kiểm tra dữ liệu nhập bằng PHP
Những kiểm tra dữ liệu nhập mà thiết lập trong trang quản trị chưa đủ có thể thêm bằng bộ lọc gform_field_validation. Nếu thêm _ID_biểu_mẫu_ID_trường sau tên hook thì nó chỉ áp dụng cho trường đó. Ví dụ sau kiểm tra số điện thoại được nhập vào trường có ID 3 của biểu mẫu có ID 1 (ở đây là kiểu số điện thoại Nhật Bản). Hãy viết vào functions.php của theme hoặc một plugin tự viết.
<?php
// Kiểm tra số điện thoại của biểu mẫu ID 1, trường ID 3
add_filter( 'gform_field_validation_1_3', function ( $result, $value, $form, $field ) {
if ( ! is_string( $value ) || '' === $value ) {
return $result; // Việc xử lý khi để trống giao cho thiết lập "Required" của trường
}
$digits = str_replace( array( '-', ' ' ), '', $value );
if ( ! preg_match( '/^0\d{9,10}$/', $digits ) ) {
$result['is_valid'] = false;
$result['message'] = 'Vui lòng nhập số điện thoại gồm 10 hoặc 11 chữ số bắt đầu bằng 0 (có thể dùng dấu gạch nối).';
}
return $result;
}, 10, 4 );
ID biểu mẫu và ID trường hiển thị khi bạn chọn trường trong trình soạn biểu mẫu. Nếu tạo lại biểu mẫu thì ID sẽ đổi, nên hãy xác nhận ID ở môi trường production và môi trường phát triển có giống nhau không.
Thông báo ra bên ngoài sau khi gửi
Với giấy phép không có add-on Webhooks, nếu muốn báo cho Slack, v.v. mỗi lần gửi, bạn có thể viết xử lý bằng action gform_after_submission. Action này chạy sau khi việc lưu entry và gửi email thông báo hoàn tất. Nó cũng chạy với các entry bị xác định là thư rác, nên hãy kiểm tra trạng thái trước khi gửi đi. Ngoài ra, với giấy phép từ Pro trở lên, cũng có cách thiết lập bằng add-on Slack hoặc add-on Zapier.
<?php
// Sau khi biểu mẫu ID 1 được gửi, thông báo tới Incoming Webhook của Slack
add_action( 'gform_after_submission_1', function ( $entry, $form ) {
if ( 'spam' === rgar( $entry, 'status' ) ) {
return;
}
// Ghi URL của Webhook trong wp-config.php bằng define( 'MY_SLACK_WEBHOOK_URL', '...' );
if ( ! defined( 'MY_SLACK_WEBHOOK_URL' ) ) {
return;
}
wp_remote_post( MY_SLACK_WEBHOOK_URL, array(
'headers' => array( 'Content-Type' => 'application/json' ),
'body' => wp_json_encode( array(
'text' => sprintf( 'Liên hệ mới: %s', rgar( $entry, '1' ) ),
) ),
'timeout' => 5,
) );
}, 10, 2 );
rgar( $entry, '1' ) là giá trị của trường có ID 1. Với trường có nhiều ô nhập như trường tên (Name), hãy lấy bằng ID có dấu thập phân như '1.3' (tên) và '1.6' (họ). URL của Webhook là thông tin bí mật, nên đừng viết trực tiếp vào mã và đừng đưa vào repository công khai.
Xem và xuất entry
Dữ liệu đã gửi được lưu trong cơ sở dữ liệu của WordPress và có thể xem danh sách ở "Forms → Entries". Để xuất ra CSV, mở "Forms → Import/Export", chọn biểu mẫu trong "Export Entries", chỉ định các trường và khoảng thời gian cần xuất rồi tải xuống.
Khi lấy từ PHP, hãy dùng GFAPI::get_entries(). Đây là ví dụ xem 10 entry mới nhất bằng WP-CLI.
wp eval 'echo wp_json_encode( GFAPI::get_entries( 1, array(), null, array( "offset" => 0, "page_size" => 10 ) ) );'
Lưu ý
- Dữ liệu đã gửi chứa thông tin cá nhân. Nếu không cần lưu, hãy quy định cách xử lý, chẳng hạn đặt thời hạn lưu trong thiết lập biểu mẫu rồi xóa, không để tệp CSV đã xuất nằm đó.
- Khi email thông báo không đến, nguyên nhân thường nằm ở việc gửi email của máy chủ chứ không phải Gravity Forms. Dùng plugin gửi qua SMTP đôi khi cải thiện được.
- Trước khi thêm mã PHP, hãy kiểm tra hoạt động trong môi trường staging xem ID biểu mẫu và ID trường có khớp không.
Có câu hỏi về WordPress? Đơn vị xuất bản trang này ở Nhật Bản và trả lời bằng tiếng Nhật. Liên hệ (tiếng Nhật)