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

สร้างฟอร์มและวางบนหน้า

  1. เปิด "Forms → New Form" ในหน้าผู้ดูแล ตั้งชื่อฟอร์มแล้วสร้าง
  2. จาก "Add Fields" ทางด้านขวา ให้วางฟิลด์ เช่น ชื่อ (Name) อีเมล (Email) หมายเลขโทรศัพท์ (Phone) ตัวเลือก (Drop Down) เนื้อหา (Paragraph Text) และช่องยินยอม (Consent)
  3. คลิกแต่ละฟิลด์เพื่อเปิดการตั้งค่า สำหรับรายการที่ต้องกรอก ให้เปิด "Required"
  4. บันทึกด้วย "Save Form"

หากต้องการวางฟอร์มบนหน้า ให้เพิ่มบล็อก "Gravity Forms" ใน block editor แล้วเลือกฟอร์มที่สร้าง หากวางด้วยช็อตโค้ด ให้ใช้รูปแบบต่อไปนี้ โดย id คือ ID ของฟอร์มที่แสดงในรายการฟอร์ม

[gravityform id="1" title="false"]

แสดงหรือซ่อนรายการด้วย conditional logic

การแสดงหรือซ่อนอย่างเช่น "แสดงช่องอัปโหลดเรซูเม่เฉพาะเมื่อประเภทการติดต่อคือ 'เรื่องการสมัครงาน'" ตั้งค่าด้วย Conditional Logic

  1. ในตัวแก้ไขฟอร์ม คลิกฟิลด์ที่ต้องการแสดงหรือซ่อน (ตัวอย่าง: ช่องอัปโหลดไฟล์เรซูเม่)
  2. เปิด "Conditional Logic" ในการตั้งค่าของฟิลด์ แล้วเปิด "Enable Conditional Logic"
  3. เลือก "Show (แสดง)" หรือ "Hide (ซ่อน)" และเลือกเงื่อนไขเป็น "All (ตรงตามทั้งหมด)" หรือ "Any (ตรงตามข้อใดข้อหนึ่ง)"
  4. ในแถวเงื่อนไข ให้เลือกฟิลด์ต้นทาง (ประเภทการติดต่อ) การเปรียบเทียบ (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 ไหม ผู้เผยแพร่เว็บไซต์นี้อยู่ที่ญี่ปุ่นและตอบเป็นภาษาญี่ปุ่น ติดต่อ (ภาษาญี่ปุ่น)

お気軽にご相談ください

お見積りへ お問い合わせへ
▲