2026年11月12日
2026年11月12日
วิธีใช้ Gravity Forms: สร้างฟอร์ม, Conditional Logic, อีเมลแจ้งเตือน
บทความนี้เป็นฉบับปรับให้เหมาะกับท้องถิ่นจากต้นฉบับภาษาญี่ปุ่น อ่านต้นฉบับภาษาญี่ปุ่น
Gravity Forms เป็นปลั๊กอินฟอร์มแบบเสียเงินที่ไม่ได้แจกจ่ายที่ WordPress.org ตั้งค่าจากหน้าผู้ดูแลได้ทั้ง "conditional logic" ที่แสดงหรือซ่อนช่องตามเงื่อนไข การแยกผู้รับอีเมลแจ้งเตือนตามเนื้อหาที่ส่งมา และการบันทึกข้อมูลที่ส่งมา (entry) ลงฐานข้อมูลพร้อมส่งออก บทความนี้อธิบายวิธีสร้างฟอร์มพื้นฐานและวิธีใช้ฮุกสำหรับนักพัฒนา เนื้อหาเกี่ยวกับไลเซนส์และชื่อรายการบนหน้าจอเป็นเนื้อหาที่ตรวจจากเว็บไซต์ทางการและเอกสาร (ภาษาอังกฤษ) ของ Gravity Forms ณ พฤศจิกายน 2026 หน้าจอเขียนด้วยชื่อรายการภาษาอังกฤษ หากแสดงเป็นภาษาไทย การเรียกอาจต่างออกไป
ไลเซนส์และแอดออนที่ใช้ได้
จำนวนไซต์และแอดออนที่ใช้ได้ต่างกันตามไลเซนส์
| ไลเซนส์ | จำนวนไซต์ | แอดออนหลัก |
|---|---|---|
| Basic | 1 | แอดออนพื้นฐาน เช่น Mailchimp, HubSpot, reCAPTCHA |
| Pro | 3 | นอกจากของ Basic แล้ว ยังมี Stripe, PayPal Checkout, Square, Zapier, Slack เป็นต้น |
| Elite | ไม่จำกัด | แอดออนทั้งหมด (Webhooks, User Registration, Signature, Survey เป็นต้น) รองรับ multisite ด้วย |
แอดออน Webhooks ที่ส่งข้อมูลที่ส่งมาไปยังระบบภายนอก ใช้ได้เฉพาะ Elite (และไลเซนส์สำหรับองค์กรไม่แสวงหาผลกำไร) ส่วน Stripe และ PayPal Checkout สำหรับการชำระเงินต้องเป็น Pro ขึ้นไป ก่อนซื้อ ให้ตรวจในหน้าราคาทางการว่าแอดออนที่ต้องการรวมอยู่ในไลเซนส์ใด
การติดตั้งและลงทะเบียน License Key
ดาวน์โหลดไฟล์ ZIP ของปลั๊กอินจากหน้าบัญชีบนเว็บไซต์ทางการของ Gravity Forms แล้วติดตั้งผ่าน "ปลั๊กอิน (Plugins) → เพิ่มใหม่ (Add New) → อัปโหลดปลั๊กอิน (Upload Plugin)" และเปิดใช้งาน หากใช้ WP-CLI ทำได้ดังนี้
wp plugin install /path/to/gravityforms.zip --activate
ใส่ License Key ที่หน้าจอ "Forms → Settings" หากต้องการแจกการตั้งค่าเดียวกันให้หลายสภาพแวดล้อม ก็มีวิธีเขียนเป็นค่าคงที่ใน wp-config.php เมื่อเขียนค่าคงที่แล้ว ช่อง License Key ในหน้าตั้งค่าจะแสดงเป็นแบบแก้ไขไม่ได้
define( 'GF_LICENSE_KEY', 'YOUR-LICENSE-KEY-HERE' );
สร้างฟอร์มและวางบนหน้า
- เปิด "Forms → New Form" ในหน้าผู้ดูแล ตั้งชื่อฟอร์มแล้วสร้าง
- จาก "Add Fields" ทางด้านขวา ให้วางฟิลด์ เช่น ชื่อ (Name) อีเมล (Email) หมายเลขโทรศัพท์ (Phone) ตัวเลือก (Drop Down) เนื้อหา (Paragraph Text) และช่องยินยอม (Consent)
- คลิกแต่ละฟิลด์เพื่อเปิดการตั้งค่า สำหรับรายการที่ต้องกรอก ให้เปิด "Required"
- บันทึกด้วย "Save Form"
หากต้องการวางฟอร์มบนหน้า ให้เพิ่มบล็อก "Gravity Forms" ใน block editor แล้วเลือกฟอร์มที่สร้าง หากวางด้วยช็อตโค้ด ให้ใช้รูปแบบต่อไปนี้ โดย id คือ ID ของฟอร์มที่แสดงในรายการฟอร์ม
[gravityform id="1" title="false"]
แสดงหรือซ่อนรายการด้วย conditional logic
การแสดงหรือซ่อนอย่างเช่น "แสดงช่องอัปโหลดเรซูเม่เฉพาะเมื่อประเภทการติดต่อคือ 'เรื่องการสมัครงาน'" ตั้งค่าด้วย Conditional Logic
- ในตัวแก้ไขฟอร์ม คลิกฟิลด์ที่ต้องการแสดงหรือซ่อน (ตัวอย่าง: ช่องอัปโหลดไฟล์เรซูเม่)
- เปิด "Conditional Logic" ในการตั้งค่าของฟิลด์ แล้วเปิด "Enable Conditional Logic"
- เลือก "Show (แสดง)" หรือ "Hide (ซ่อน)" และเลือกเงื่อนไขเป็น "All (ตรงตามทั้งหมด)" หรือ "Any (ตรงตามข้อใดข้อหนึ่ง)"
- ในแถวเงื่อนไข ให้เลือกฟิลด์ต้นทาง (ประเภทการติดต่อ) การเปรียบเทียบ (is) และค่า (เรื่องการสมัครงาน) กดเครื่องหมายบวกข้างแถวเพื่อเพิ่มเงื่อนไข
อีเมลแจ้งเตือนและข้อความยืนยันก็ตั้ง conditional logic แยกกันได้เช่นกัน
ตั้งค่าอีเมลแจ้งเตือน
ตั้งค่าอีเมลแจ้งเตือนที่ "Forms → ฟอร์มเป้าหมาย → Form Settings → Notifications" เมื่อสร้างฟอร์มแล้วจะมีการแจ้งเตือนถึงผู้ดูแลเตรียมไว้ 1 รายการ ใช้ "Add New" เพื่อเพิ่มการแจ้งเตือนอื่น เช่น การตอบกลับอัตโนมัติ
| รายการ | เนื้อหา |
|---|---|
| Send To | ผู้รับ "Enter Email" คือที่อยู่อีเมลคงที่ "Select a Field" คือช่องอีเมลของฟอร์ม "Configure Routing" คือแยกผู้รับตามสิ่งที่กรอก |
| From Email | ผู้ส่ง ใช้ {admin_email} (อีเมลผู้ดูแลใน "ตั้งค่า (Settings) → ทั่วไป (General)" ของ WordPress) หรือที่อยู่อีเมลคงที่ |
| Reply To | ที่อยู่สำหรับตอบกลับ ในการแจ้งเตือนถึงผู้ดูแล หากใส่ merge tag ของช่องอีเมลของผู้ติดต่อไว้ จะตอบกลับได้สะดวก |
| Subject / Message | หัวข้อและเนื้อหา แทรกสิ่งที่กรอกด้วย merge tag ได้ |
merge tag คือสัญลักษณ์ที่แทรกค่าที่ส่งมา ค่าของฟิลด์อยู่ในรูป {ป้ายชื่อ:ID ของฟิลด์} (ตัวอย่าง: {Name:1} จะละป้ายชื่อแล้วเขียนเป็น {:1} ก็ได้) ส่วน {all_fields} จะแทรกสิ่งที่กรอกทั้งหมดเป็นตาราง หากเลือกจากปุ่ม merge tag ที่มุมขวาบนของช่องข้อความ ก็กรอกได้โดยไม่ต้องหา ID ของฟิลด์
หากตั้งที่อยู่ผู้ส่งเป็นที่อยู่ในโดเมนเดียวกับไซต์ จะไม่ค่อยถูกมองว่าเป็นอีเมลขยะ หลีกเลี่ยงการใช้อีเมลของผู้ติดต่อเป็นผู้ส่ง และให้ใส่ไว้ใน Reply To
ข้อความยืนยันหลังส่ง
ตั้งค่าการแสดงผลหลังส่งที่ "Form Settings → Confirmations" มี 3 ประเภท
- Text: แสดงข้อความตรงตำแหน่งของฟอร์ม (ค่าเริ่มต้น)
- Page: ไปยังหน้าภายในไซต์
- Redirect: ไปยัง URL ที่ระบุ
หากเตรียมหน้าส่งเสร็จสมบูรณ์ไว้ใช้วัดผลโฆษณาหรือการวิเคราะห์การเข้าถึง ให้เลือก Page หรือ Redirect
เพิ่มการตรวจข้อมูลด้วย PHP
การตรวจข้อมูลที่การตั้งค่าในหน้าผู้ดูแลทำไม่ได้ สามารถเพิ่มด้วยฟิลเตอร์ gform_field_validation ได้ หากต่อท้ายชื่อฮุกด้วย _ID ของฟอร์ม_ID ของฟิลด์ ก็จะมีผลเฉพาะฟิลด์นั้น ตัวอย่างต่อไปนี้ตรวจหมายเลขโทรศัพท์ที่กรอกในฟิลด์ ID 3 ของฟอร์ม ID 1 (ใช้รูปแบบหมายเลขโทรศัพท์ของญี่ปุ่นเป็นตัวอย่าง) เขียนใน functions.php ของธีม หรือในปลั๊กอินที่สร้างเอง
<?php
// ตรวจหมายเลขโทรศัพท์ของฟอร์ม ID 1 ฟิลด์ ID 3
add_filter( 'gform_field_validation_1_3', function ( $result, $value, $form, $field ) {
if ( ! is_string( $value ) || '' === $value ) {
return $result; // การจัดการกรณีไม่กรอก ให้เป็นไปตามการตั้งค่า "Required" ของฟิลด์
}
$digits = str_replace( array( '-', ' ' ), '', $value );
if ( ! preg_match( '/^0\d{9,10}$/', $digits ) ) {
$result['is_valid'] = false;
$result['message'] = 'กรุณากรอกหมายเลขโทรศัพท์เป็นตัวเลข 10 หรือ 11 หลักที่ขึ้นต้นด้วย 0 (ใช้ขีดกลางได้)';
}
return $result;
}, 10, 4 );
ID ของฟอร์มและ ID ของฟิลด์จะแสดงเมื่อเลือกฟิลด์ในตัวแก้ไขฟอร์ม หากสร้างฟอร์มใหม่ ID จะเปลี่ยน จึงต้องตรวจว่า ID ตรงกันหรือไม่ระหว่างสภาพแวดล้อมจริงกับสภาพแวดล้อมพัฒนา
แจ้งภายนอกหลังส่ง
หากอยู่ในไลเซนส์ที่ไม่มีแอดออน Webhooks และต้องการแจ้ง Slack เป็นต้น ทุกครั้งที่ส่ง สามารถเขียนการประมวลผลด้วยแอ็กชัน gform_after_submission แอ็กชันนี้ทำงานหลังบันทึก entry และส่งอีเมลแจ้งเตือนเสร็จ และยังทำงานกับ entry ที่ถูกตัดสินว่าเป็นสแปมด้วย จึงต้องตรวจสถานะก่อนส่ง นอกจากนี้ หากเป็นไลเซนส์ Pro ขึ้นไป ก็มีวิธีตั้งค่าด้วยแอดออน Slack หรือแอดออน Zapier
<?php
// หลังส่งฟอร์ม ID 1 ให้แจ้งไปยัง Incoming Webhook ของ Slack
add_action( 'gform_after_submission_1', function ( $entry, $form ) {
if ( 'spam' === rgar( $entry, 'status' ) ) {
return;
}
// เขียน URL ของ Webhook ไว้ใน wp-config.php ด้วย 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( 'มีผู้ติดต่อใหม่: %s', rgar( $entry, '1' ) ),
) ),
'timeout' => 5,
) );
}, 10, 2 );
rgar( $entry, '1' ) คือค่าของฟิลด์ ID 1 ส่วนฟิลด์ที่มีช่องกรอกหลายช่อง เช่น ฟิลด์ชื่อ (Name) ให้ดึงด้วย ID ที่มีจุดทศนิยม เช่น '1.3' (ชื่อ) และ '1.6' (นามสกุล) URL ของ Webhook เป็นข้อมูลลับ จึงไม่ควรเขียนลงในโค้ดโดยตรง และไม่ควรรวมไว้ในรีโพสิทอรีสาธารณะ
ตรวจและส่งออก entry
ข้อมูลที่ส่งมาจะถูกบันทึกในฐานข้อมูลของ WordPress และดูเป็นรายการได้ที่ "Forms → Entries" หากต้องการส่งออกเป็น CSV ให้เปิด "Forms → Import/Export" เลือกฟอร์มที่ "Export Entries" ระบุรายการที่จะส่งออกและช่วงเวลา แล้วดาวน์โหลด
หากดึงออกจาก PHP ให้ใช้ GFAPI::get_entries() ตัวอย่างการตรวจ 10 รายการล่าสุดด้วย WP-CLI
wp eval 'echo wp_json_encode( GFAPI::get_entries( 1, array(), null, array( "offset" => 0, "page_size" => 10 ) ) );'
ข้อควรระวัง
- ข้อมูลที่ส่งมามีข้อมูลส่วนบุคคลรวมอยู่ หากไม่จำเป็นต้องเก็บไว้ ให้กำหนดวิธีจัดการไว้ เช่น กำหนดระยะเวลาเก็บในการตั้งค่าฟอร์มแล้วลบ และไม่ทิ้งไฟล์ CSV ที่ส่งออกไว้
- หากอีเมลแจ้งเตือนไม่ถึง สาเหตุมักอยู่ที่การส่งอีเมลของเซิร์ฟเวอร์ ไม่ใช่ Gravity Forms การใช้ปลั๊กอินที่ส่งผ่าน SMTP อาจช่วยให้ดีขึ้น
- ก่อนเพิ่มโค้ด PHP ให้ตรวจว่า ID ของฟอร์มและ ID ของฟิลด์ตรงกันหรือไม่ และตรวจการทำงานบนสภาพแวดล้อม staging
มีคำถามเกี่ยวกับ WordPress ไหม ผู้เผยแพร่เว็บไซต์นี้อยู่ที่ญี่ปุ่นและตอบเป็นภาษาญี่ปุ่น ติดต่อ (ภาษาญี่ปุ่น)