Install
Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/mynameispond/wp-thailand-address-autocomplete/releases/download/1.0.14/wp-thailand-address-autocomplete-1.0.14.zipปลั๊กอินสำหรับช่วยเลือกที่อยู่ไทยแบบไล่ลำดับ:
จังหวัด -> อำเภอ/เขต -> ตำบล/แขวง -> รหัสไปรษณีย์
1) ติดตั้งปลั๊กอิน
- อัปโหลดโฟลเดอร์ปลั๊กอินไปที่
wp-content/plugins/ - เปิดใช้งานปลั๊กอินจากหน้า WordPress Admin
ส่วนผู้สร้างปลั๊กอิน/ผู้พัฒนา
เนื้อหาในหัวข้อ 2-7 เหมาะสำหรับการฝังปลั๊กอินในธีมหรือปลั๊กอินอื่น
2) วางฟอร์มพื้นฐาน
ใส่ class ให้กับ select โดยใส่ที่ตัว select โดยตรง หรือใส่ที่ parent ก็ได้
<select class="wpata-select-province"></select>
<select class="wpata-select-district"></select>
<select class="wpata-select-subdistrict"></select>
<select class="wpata-select-postalcode"></select>
3) การจัดกลุ่ม (wpata-group-*)
wpata-group-* คือ class ที่ผู้ใช้กำหนดเอง เพื่อบอกว่า select 4 ตัวไหนเป็น "ชุดเดียวกัน"
เมื่อไหร่ "ต้อง" ใส่ wpata-group-*
- มีหลายชุดใน context เดียวกัน และจะ init พร้อมกัน (เช่น
wpataInit(document)หรือwpataInit('#container')ที่มีหลายชุดใหม่) - ต้องการให้จับคู่ field ได้แน่นอน ไม่พึ่งลำดับ DOM
เมื่อไหร่ "ไม่ใส่ก็ได้"
- มีแค่ 1 ชุดในหน้านั้น
- append ทีละ 1 ชุด แล้วเรียก
wpataInit()ทันทีหลัง append (ไม่ว่าจะส่ง#new-set,#container, หรือ$nodes) เพราะตอนนั้นมีเพียงชุดใหม่ที่ยังไม่ถูก init
ตัวอย่างแบบแนะนำ (หลายชุดในหน้าเดียว)
ใส่ group ที่ parent ได้เลย ไม่จำเป็นต้องใส่ซ้ำทุก select
<div class="address-set-a wpata-group-1">
<select class="wpata-select-province"></select>
<select class="wpata-select-district"></select>
<select class="wpata-select-subdistrict"></select>
<select class="wpata-select-postalcode"></select>
</div>
<div class="address-set-b wpata-group-2">
<select class="wpata-select-province"></select>
<select class="wpata-select-district"></select>
<select class="wpata-select-subdistrict"></select>
<select class="wpata-select-postalcode"></select>
</div>
4) ตั้งค่าเริ่มต้น (Initial Value)
สามารถกำหนดค่าเริ่มต้นได้ 2 แบบ:
- มีค่า
valueอยู่แล้วในselectก่อนปลั๊กอินเริ่มทำงาน - ใส่
data-wpata-valueเพื่อบังคับค่าเริ่มต้น
<select class="wpata-select-province wpata-group-1" data-wpata-value="{{province_id}}"></select>
<select class="wpata-select-district wpata-group-1" data-wpata-value="{{district_id}}"></select>
<select class="wpata-select-subdistrict wpata-group-1" data-wpata-value="{{subdistrict_id}}"></select>
<select class="wpata-select-postalcode wpata-group-1" data-wpata-value="{{postalcode_id}}"></select>
หมายเหตุ: ค่าใน data-wpata-value ต้องเป็นค่า value ของ option ในแต่ละระดับ
และต้องเป็นชุดข้อมูลที่สัมพันธ์กัน (จังหวัด/อำเภอ/ตำบล/รหัสไปรษณีย์จากเส้นเดียวกัน)
5) เพิ่ม input ภายหลัง (AJAX / append) และการเรียก wpataInit()
เมื่อมีการเพิ่มฟอร์มใหม่ทีหลังหน้าโหลดเสร็จ ให้เรียก:
window.wpataInit(containerElement);
context ที่ส่งเข้า wpataInit() ได้:
- ไม่ส่งค่า /
document= init ทั้งหน้า - string selector เช่น
#id,.class - DOM element
- jQuery object (แนะนำที่สุดหลัง append เพราะชี้เฉพาะ node ใหม่)
- ไม่แนะนำส่ง HTML string ตรงๆ
ตัวอย่าง 1: append ทีละ 1 ชุด (ไม่ใส่ group ก็ได้)
const html = `
<div id="new-address-set">
<select class="wpata-select-province"></select>
<select class="wpata-select-district"></select>
<select class="wpata-select-subdistrict"></select>
<select class="wpata-select-postalcode"></select>
</div>
`;
$('#target').append(html);
window.wpataInit('#target'); // ได้ เพราะ append ทีละชุด และ init ทันที
ตัวอย่าง 2: append หลายชุดพร้อมกัน (ควรใส่ group)
const html = `
<div class="wpata-group-a">
<select class="wpata-select-province"></select>
<select class="wpata-select-district"></select>
<select class="wpata-select-subdistrict"></select>
<select class="wpata-select-postalcode"></select>
</div>
<div class="wpata-group-b">
<select class="wpata-select-province"></select>
<select class="wpata-select-district"></select>
<select class="wpata-select-subdistrict"></select>
<select class="wpata-select-postalcode"></select>
</div>
`;
const $nodes = $(html);
$('#target').append($nodes);
window.wpataInit($nodes); // แนะนำ
หรือ trigger event ได้เช่นกัน:
$(document).trigger('wpata:init', ['#target']);
หมายเหตุ:
- ระบบตั้งค่า
window.wpataConfig.ajaxUrlให้อัตโนมัติแล้ว - ไม่ต้องกำหนดเองทุกหน้า เว้นแต่ต้องการ override endpoint
Cheat Sheet (ตัดสินใจเร็ว)
| สถานการณ์ | ต้องใส่ wpata-group-* ไหม |
ควรเรียก wpataInit(...) แบบไหน |
หมายเหตุ |
|---|---|---|---|
| มีฟอร์มแค่ 1 ชุดในหน้า | ไม่ต้องใส่ก็ได้ | wpataInit(document) หรือ wpataInit('#container') |
ใช้งานได้ปกติ |
| Append ทีละ 1 ชุด แล้ว init ทันที | ไม่ต้องใส่ก็ได้ | wpataInit('#container') หรือ wpataInit($newNodes) |
แบบที่ปลอดภัยสุดคือ $newNodes |
| Append หลายชุดพร้อมกันในครั้งเดียว | ควรใส่ | wpataInit($newNodes) |
ช่วยให้จับคู่ 4 select ต่อชุดได้ชัดเจน |
| หน้าเดียวมีหลายชุดอยู่แล้ว แล้ว init ทั้งหน้า | ควรใส่ | wpataInit(document) |
ไม่ควรพึ่งลำดับ DOM |
| เพิ่มชุดหลายรอบ แล้วค่อย init ทีเดียวภายหลัง | ควรใส่ | wpataInit('#container') |
ลดโอกาสจับคู่ข้ามชุด |
ตัวอย่างสั้น:
// 1) Append ทีละชุด (ไม่ใส่ group ก็ได้)
$('#target').append(oneSetHtml);
window.wpataInit('#target');
// 2) Append หลายชุดพร้อมกัน (ควรใส่ group ใน HTML ทุกชุด)
const $nodes = $(manySetsHtml);
$('#target').append($nodes);
window.wpataInit($nodes);
6) การเลือกภาษา
ปลั๊กอินจะเลือกภาษาตามลำดับความสำคัญ:
- class
wpata-lang-*บนหน้า เช่นwpata-lang-thหรือwpata-lang-en - ค่า
langของ<html>เช่นthหรือen-US - ค่าเริ่มต้นเป็น
th
ตัวอย่าง:
<div class="wpata-lang-en"></div>
7) ปรับข้อความหัวข้อใน dropdown (ไม่บังคับ)
สามารถตั้งค่า option ใน WordPress เพื่อเปลี่ยนข้อความได้:
wpata_nodata_th,wpata_nodata_enwpata_province_th,wpata_province_enwpata_district_th,wpata_district_enwpata_subdistrict_th,wpata_subdistrict_enwpata_postalcode_th,wpata_postalcode_en
ถ้าไม่ได้ตั้งค่า ปลั๊กอินจะใช้ข้อความ default ให้อัตโนมัติ
8) ตั้งค่าข้อความผ่านหลังบ้าน (Admin)
ไปที่เมนู Tools > WP Thailand Address แล้วเลือกแท็บ ตั้งค่าข้อความ
หน้านี้สามารถแก้ค่าได้โดยตรงสำหรับ:
wpata_nodata_th,wpata_nodata_enwpata_province_th,wpata_province_enwpata_district_th,wpata_district_enwpata_subdistrict_th,wpata_subdistrict_enwpata_postalcode_th,wpata_postalcode_en
9) จัดการข้อมูลที่อยู่ผ่านหลังบ้าน (Admin)
ไปที่เมนู Tools > WP Thailand Address แล้วเลือกแท็บ จัดการข้อมูลที่อยู่
สามารถทำได้:
- เพิ่ม/แก้ไขจังหวัด
- เพิ่ม/แก้ไขอำเภอ/เขต (อ้างอิงจังหวัด)
- เพิ่ม/แก้ไขตำบล/แขวง (อ้างอิงอำเภอ/เขต และจังหวัด)
- เพิ่ม/แก้ไขรหัสไปรษณีย์ (อ้างอิงตำบล/แขวง)
- ลบข้อมูลแบบปลอดภัย โดยระบบจะไม่ให้ลบ parent ถ้ายังมีข้อมูลลูกเชื่อมอยู่
- ฟิลเตอร์จังหวัด/อำเภอ/ตำบลในหน้า Admin เป็นแบบ live dependent dropdown (dropdown ลูกเปลี่ยนทันที โดยไม่ auto submit)
ระบบจะตรวจลำดับความสัมพันธ์ของข้อมูลให้เสมอ เพื่อป้องกันการโยงข้อมูลข้ามลำดับผิด
10) ขั้นตอนการ Deactivate ปลั๊กอิน
เมื่อกด Deactivate ในหน้า Plugins ระบบจะแสดงคำถามว่า:
- ต้องการลบข้อมูลทั้งหมดด้วยหรือไม่
การทำงาน:
- ถ้ากด
ตกลงจะ deactivate และลบข้อมูลทั้งหมดของปลั๊กอิน (รวมตาราง/option) - ถ้ากด
ยกเลิกจะ deactivate แต่เก็บข้อมูลไว้
ส่วนผู้สร้างปลั๊กอิน/ผู้พัฒนา (เพิ่มเติม)
เนื้อหาในหัวข้อ 11-13 เป็นตัวอย่างใช้งานและการอัปเดตเวอร์ชัน
11) ตัวอย่างการใช้งานเพิ่มเติม
ดูโฟลเดอร์ examples/ สำหรับตัวอย่างพร้อมใช้:
- หลายชุดในหน้าเดียว
- ตั้งค่า default value
- เพิ่มชุดฟอร์มผ่าน AJAX/append (jQuery CDN) แล้วเรียก
wpataInit()ซ้ำ
12) Helper: รับ ID แล้วคืนชื่อ
ปลั๊กอินมี helper function สำหรับแปลง id -> ชื่อ ดังนี้:
wpata_get_province_name_by_id($pv_id, $lang = 'th')wpata_get_district_name_by_id($dt_id, $lang = 'th')wpata_get_subdistrict_name_by_id($sdt_id, $lang = 'th')wpata_get_postalcode_name_by_id($ptc_id)
ตัวอย่าง:
$province_name_th = wpata_get_province_name_by_id(1, 'th');
$district_name_en = wpata_get_district_name_by_id(1, 'en');
$subdistrict_name_th = wpata_get_subdistrict_name_by_id(1, 'th');
$postal_code = wpata_get_postalcode_name_by_id(1);
หมายเหตุ:
- ถ้าไม่พบข้อมูล หรือส่ง
idไม่ถูกต้อง ฟังก์ชันจะคืนค่าว่าง'' - พารามิเตอร์
$langรองรับthและen
13) อัปเดตปลั๊กอินผ่านหน้า Plugins (GitHub Tag/Release)
ปลั๊กอินนี้รองรับการเช็กอัปเดตจาก GitHub โดยใช้ YahnisElsts/plugin-update-checker
และแสดงปุ่มอัปเดตในหน้า Plugins ของ WordPress ได้ทันที
13.1 เตรียมไลบรารี plugin-update-checker
วิธีที่แนะนำ (Composer):
composer install --no-dev
โดยในโปรเจกต์มี composer.json ให้แล้ว และจะโหลดไฟล์จาก vendor/autoload.php อัตโนมัติ
ทางเลือก (ไม่ใช้ Composer):
- คัดลอกโฟลเดอร์ไลบรารีมาไว้ที่:
plugin-update-checker/plugin-update-checker.phpหรือlib/plugin-update-checker/plugin-update-checker.php
13.2 ตัวแปรเสริมที่ปรับได้
ตั้งค่าใน wp-config.php ได้ (ไม่บังคับ):
define('WPATA_GITHUB_BRANCH', 'main'); // ค่าเริ่มต้นคือ main
define('WPATA_GITHUB_TOKEN', 'ghp_xxx'); // ใส่เมื่อเป็น private repo
13.3 ขั้นตอนปล่อยเวอร์ชันใหม่ด้วย Tag/Release
- แก้เวอร์ชันในไฟล์ปลั๊กอินให้ตรงกันทั้ง 2 จุด:
Version:และWPATA_VERSION - Commit โค้ด แล้วสร้าง tag ใหม่ (เช่น
1.0.3หรือv1.0.3) - สร้าง GitHub Release จาก tag นั้น
- แนบไฟล์ zip ของปลั๊กอินใน Release (ควรมีโฟลเดอร์
vendorหรือไลบรารีที่จำเป็นครบ) - ไปที่ WordPress Admin >
Dashboard > Updatesหรือหน้าPluginsแล้วเช็กอัปเดต - เมื่อพบเวอร์ชันใหม่ จะกด
Update nowได้จากหน้า Plugins ทันที
13.4 หมายเหตุสำคัญ
- เวอร์ชันใน tag/release ต้องมากกว่าเวอร์ชันที่ติดตั้งอยู่
- ถ้าเป็น private repo ต้องกำหนด
WPATA_GITHUB_TOKENให้ WordPress เข้าถึงข้อมูล release ได้ - ถ้าไม่พบไลบรารี
plugin-update-checkerระบบจะข้ามการเช็กอัปเดต (ไม่กระทบการทำงานส่วนอื่นของปลั๊กอิน)
Releases
1 release. Each count is every asset in that release; expand a row for the breakdown.