diff --git a/inc/class-wooviet-admin-page.php b/inc/class-wooviet-admin-page.php
index b007427..d572d55 100644
--- a/inc/class-wooviet-admin-page.php
+++ b/inc/class-wooviet-admin-page.php
@@ -98,7 +98,18 @@ class WooViet_Admin_Page {
-
+
diff --git a/inc/class-wooviet-cities.php b/inc/class-wooviet-cities.php
new file mode 100644
index 0000000..1bff981
--- /dev/null
+++ b/inc/class-wooviet-cities.php
@@ -0,0 +1,887 @@
+ array(
+ 'Huyện An Phú',
+ 'Huyện Châu Phú',
+ 'Huyện Châu Thành',
+ 'Huyện Chợ Mới',
+ 'Huyện Phú Tân',
+ 'Huyện Thoại Sơn',
+ 'Huyện Tịnh Biên',
+ 'Huyện Tri Tôn',
+ 'Thành phố Châu Đốc',
+ 'Thành phố Long Xuyên',
+ 'Thị xã Tân Châu'
+ ),
+ 'BA-RIA-VUNG-TAU' => array(
+ 'Huyện Châu Đức',
+ 'Huyện Côn Đảo',
+ 'Huyện Đất Đỏ',
+ 'Huyện Long Điền',
+ 'Huyện Tân Thành',
+ 'Huyện Xuyên Mộc',
+ 'Thành phố Bà Rịa',
+ 'Thành phố Vũng Tàu'
+ ),
+ 'BAC-LIEU' => array(
+ 'Huyện Đông Hải',
+ 'Huyện Hoà Bình',
+ 'Huyện Hồng Dân',
+ 'Huyện Phước Long',
+ 'Huyện Vĩnh Lợi',
+ 'Thành phố Bạc Liêu',
+ 'Thị xã Giá Rai'
+ ),
+ 'BAC-KAN' => array(
+ 'Huyện Ba Bể',
+ 'Huyện Bạch Thông',
+ 'Huyện Chợ Đồn',
+ 'Huyện Chợ Mới',
+ 'Huyện Na Rì',
+ 'Huyện Ngân Sơn',
+ 'Huyện Pác Nặm',
+ 'Thành Phố Bắc Kạn',
+ ),
+ 'BAC-GIANG' => array(
+ 'Huyện Hiệp Hòa',
+ 'Huyện Lạng Giang',
+ 'Huyện Lục Nam',
+ 'Huyện Lục Ngạn',
+ 'Huyện Sơn Động',
+ 'Huyện Tân Yên',
+ 'Huyện Việt Yên',
+ 'Huyện Yên Dũng',
+ 'Huyện Yên Thế',
+ 'Thành phố Bắc Giang'
+ ),
+ 'BAC-NINH' => array(
+ 'Huyện Gia Bình',
+ 'Huyện Lương Tài',
+ 'Huyện Quế Võ',
+ 'Huyện Thuận Thành',
+ 'Huyện Tiên Du',
+ 'Huyện Yên Phong',
+ 'Thành phố Bắc Ninh',
+ 'Thị xã Từ Sơn'
+ ),
+ 'BEN-TRE' => array(
+ 'Huyện Ba Tri',
+ 'Huyện Bình Đại',
+ 'Huyện Châu Thành',
+ 'Huyện Chợ Lách',
+ 'Huyện Giồng Trôm',
+ 'Huyện Mỏ Cày Bắc',
+ 'Huyện Mỏ Cày Nam',
+ 'Huyện Thạnh Phú',
+ 'Thành phố Bến Tre'
+ ),
+ 'BINH-DUONG' => array(
+ 'Huyện Bắc Tân Uyên',
+ 'Huyện Bàu Bàng',
+ 'Huyện Dầu Tiếng',
+ 'Huyện Phú Giáo',
+ 'Thành phố Thủ Dầu Một',
+ 'Thị xã Bến Cát',
+ 'Thị xã Dĩ An',
+ 'Thị xã Tân Uyên',
+ 'Thị xã Thuận An'
+ ),
+ 'BINH-DINH' => array(
+ 'Huyện An Lão',
+ 'Huyện Hoài Ân',
+ 'Huyện Hoài Nhơn',
+ 'Huyện Phù Cát',
+ 'Huyện Phù Mỹ',
+ 'Huyện Tây Sơn',
+ 'Huyện Tuy Phước',
+ 'Huyện Vân Canh',
+ 'Huyện Vĩnh Thạnh',
+ 'Thành phố Qui Nhơn',
+ 'Thị xã An Nhơn'
+ ),
+ 'BINH-PHUOC' => array(
+ 'Huyện Bù Đăng',
+ 'Huyện Bù Đốp',
+ 'Huyện Bù Gia Mập',
+ 'Huyện Chơn Thành',
+ 'Huyện Đồng Phú',
+ 'Huyện Hớn Quản',
+ 'Huyện Lộc Ninh',
+ 'Huyện Phú Riềng',
+ 'Thị xã Bình Long',
+ 'Thị xã Đồng Xoài',
+ 'Thị xã Phước Long'
+ ),
+ 'BINH-THUAN' => array(
+ 'Huyện Bắc Bình',
+ 'Huyện Đức Linh',
+ 'Huyện Hàm Tân',
+ 'Huyện Hàm Thuận Bắc',
+ 'Huyện Hàm Thuận Nam',
+ 'Huyện Phú Quí',
+ 'Huyện Tánh Linh',
+ 'Huyện Tuy Phong',
+ 'Thành phố Phan Thiết',
+ 'Thị xã La Gi'
+ ),
+ 'CA-MAU' => array(
+ 'Huyện Cái Nước',
+ 'Huyện Đầm Dơi',
+ 'Huyện Năm Căn',
+ 'Huyện Ngọc Hiển',
+ 'Huyện Phú Tân',
+ 'Huyện Thới Bình',
+ 'Huyện Trần Văn Thời',
+ 'Huyện U Minh',
+ 'Thành phố Cà Mau'
+ ),
+ 'CAO-BANG' => array(
+ 'Huyện Bảo Lạc',
+ 'Huyện Bảo Lâm',
+ 'Huyện Hạ Lang',
+ 'Huyện Hà Quảng',
+ 'Huyện Hoà An',
+ 'Huyện Nguyên Bình',
+ 'Huyện Phục Hoà',
+ 'Huyện Quảng Uyên',
+ 'Huyện Thạch An',
+ 'Huyện Thông Nông',
+ 'Huyện Trà Lĩnh',
+ 'Huyện Trùng Khánh',
+ 'Thành phố Cao Bằng'
+ ),
+ 'CAN-THO' => array(
+ 'Huyện Cờ Đỏ',
+ 'Huyện Phong Điền',
+ 'Huyện Thới Lai',
+ 'Huyện Vĩnh Thạnh',
+ 'Quận Bình Thuỷ',
+ 'Quận Cái Răng',
+ 'Quận Ninh Kiều',
+ 'Quận Ô Môn',
+ 'Quận Thốt Nốt',
+ ),
+ 'DA-NANG' => array(
+ 'Huyện Hòa Vang',
+ 'Huyện Hoàng Sa',
+ 'Quận Cẩm Lệ',
+ 'Quận Hải Châu',
+ 'Quận Liên Chiểu',
+ 'Quận Ngũ Hành Sơn',
+ 'Quận Sơn Trà',
+ 'Quận Thanh Khê',
+ ),
+ 'DAK-LAK' => array(
+ 'Huyện Buôn Đôn',
+ 'Huyện Cư Kuin',
+ 'Huyện Cư M gar',
+ 'Huyện Ea H leo',
+ 'Huyện Ea Kar',
+ 'Huyện Ea Súp',
+ 'Huyện Krông A Na',
+ 'Huyện Krông Bông',
+ 'Huyện Krông Búk',
+ 'Huyện Krông Năng',
+ 'Huyện Krông Pắc',
+ 'Huyện Lắk',
+ 'Huyện M Đrắk',
+ 'Thành phố Buôn Ma Thuột',
+ 'Thị Xã Buôn Hồ'
+ ),
+ 'DAK-NONG' => array(
+ 'Huyện Cư Jút',
+ 'Huyện Đăk Glong',
+ 'Huyện Đắk Mil',
+ 'Huyện Đắk R Lấp',
+ 'Huyện Đắk Song',
+ 'Huyện Krông Nô',
+ 'Huyện Tuy Đức',
+ 'Thị xã Gia Nghĩa'
+ ),
+ 'DONG-NAI' => array(
+ 'Huyện Cẩm Mỹ',
+ 'Huyện Định Quán',
+ 'Huyện Long Thành',
+ 'Huyện Nhơn Trạch',
+ 'Huyện Tân Phú',
+ 'Huyện Thống Nhất',
+ 'Huyện Trảng Bom',
+ 'Huyện Vĩnh Cửu',
+ 'Huyện Xuân Lộc',
+ 'Thành phố Biên Hòa',
+ 'Thị xã Long Khánh'
+ ),
+ 'DONG-THAP' => array(
+ 'Huyện Cao Lãnh',
+ 'Huyện Châu Thành',
+ 'Huyện Hồng Ngự',
+ 'Huyện Lai Vung',
+ 'Huyện Lấp Vò',
+ 'Huyện Tam Nông',
+ 'Huyện Tân Hồng',
+ 'Huyện Thanh Bình',
+ 'Huyện Tháp Mười',
+ 'Thành phố Cao Lãnh',
+ 'Thành phố Sa Đéc',
+ 'Thị xã Hồng Ngự'
+ ),
+ 'DIEN-BIEN' => array(
+ 'Huyện Điện Biên',
+ 'Huyện Điện Biên Đông',
+ 'Huyện Mường Ảng',
+ 'Huyện Mường Chà',
+ 'Huyện Mường Nhé',
+ 'Huyện Nậm Pồ',
+ 'Huyện Tủa Chùa',
+ 'Huyện Tuần Giáo',
+ 'Thành phố Điện Biên Phủ',
+ 'Thị Xã Mường Lay'
+ ),
+ 'GIA-LAI' => array(
+ 'Huyện Chư Păh',
+ 'Huyện Chư Prông',
+ 'Huyện Chư Pưh',
+ 'Huyện Chư Sê',
+ 'Huyện Đăk Đoa',
+ 'Huyện Đăk Pơ',
+ 'Huyện Đức Cơ',
+ 'Huyện Ia Grai',
+ 'Huyện Ia Pa',
+ 'Huyện KBang',
+ 'Huyện Kông Chro',
+ 'Huyện Krông Pa',
+ 'Huyện Mang Yang',
+ 'Huyện Phú Thiện',
+ 'Thành phố Pleiku',
+ 'Thị xã An Khê',
+ 'Thị xã Ayun Pa'
+ ),
+ 'HA-GIANG' => array(
+ 'Huyện Bắc Mê',
+ 'Huyện Bắc Quang',
+ 'Huyện Đồng Văn',
+ 'Huyện Hoàng Su Phì',
+ 'Huyện Mèo Vạc',
+ 'Huyện Quản Bạ',
+ 'Huyện Quang Bình',
+ 'Huyện Vị Xuyên',
+ 'Huyện Xín Mần',
+ 'Huyện Yên Minh',
+ 'Thành phố Hà Giang'
+ ),
+ 'HA-NAM' => array(
+ 'Huyện Bình Lục',
+ 'Huyện Duy Tiên',
+ 'Huyện Kim Bảng',
+ 'Huyện Lý Nhân',
+ 'Huyện Thanh Liêm',
+ 'Thành phố Phủ Lý'
+ ),
+ 'HA-NOI' => array(
+ 'Huyện Ba Vì',
+ 'Huyện Chương Mỹ',
+ 'Huyện Đan Phượng',
+ 'Huyện Đông Anh',
+ 'Huyện Gia Lâm',
+ 'Huyện Hoài Đức',
+ 'Huyện Mê Linh',
+ 'Huyện Mỹ Đức',
+ 'Huyện Phú Xuyên',
+ 'Huyện Phúc Thọ',
+ 'Huyện Quốc Oai',
+ 'Huyện Sóc Sơn',
+ 'Huyện Thạch Thất',
+ 'Huyện Thanh Oai',
+ 'Huyện Thanh Trì',
+ 'Huyện Thường Tín',
+ 'Huyện Ứng Hòa',
+ 'Quận Ba Đình',
+ 'Quận Bắc Từ Liêm',
+ 'Quận Cầu Giấy',
+ 'Quận Đống Đa',
+ 'Quận Hà Đông',
+ 'Quận Hai Bà Trưng',
+ 'Quận Hoàn Kiếm',
+ 'Quận Hoàng Mai',
+ 'Quận Long Biên',
+ 'Quận Nam Từ Liêm',
+ 'Quận Tây Hồ',
+ 'Quận Thanh Xuân',
+ 'Thị xã Sơn Tây'
+ ),
+ 'HA-TINH' => array(
+ 'Huyện Cẩm Xuyên',
+ 'Huyện Can Lộc',
+ 'Huyện Đức Thọ',
+ 'Huyện Hương Khê',
+ 'Huyện Hương Sơn',
+ 'Huyện Kỳ Anh',
+ 'Huyện Lộc Hà',
+ 'Huyện Nghi Xuân',
+ 'Huyện Thạch Hà',
+ 'Huyện Vũ Quang',
+ 'Thành phố Hà Tĩnh',
+ 'Thị xã Hồng Lĩnh',
+ 'Thị xã Kỳ Anh'
+ ),
+ 'HAI-DUONG' => array(
+ 'Huyện Bình Giang',
+ 'Huyện Cẩm Giàng',
+ 'Huyện Gia Lộc',
+ 'Huyện Kim Thành',
+ 'Huyện Kinh Môn',
+ 'Huyện Nam Sách',
+ 'Huyện Ninh Giang',
+ 'Huyện Thanh Hà',
+ 'Huyện Thanh Miện',
+ 'Huyện Tứ Kỳ',
+ 'Thành phố Hải Dương',
+ 'Thị xã Chí Linh'
+ ),
+ 'HAI-PHONG' => array(
+ 'Huyện An Dương',
+ 'Huyện An Lão',
+ 'Huyện Bạch Long Vĩ',
+ 'Huyện Cát Hải',
+ 'Huyện Kiến Thuỵ',
+ 'Huyện Thuỷ Nguyên',
+ 'Huyện Tiên Lãng',
+ 'Huyện Vĩnh Bảo',
+ 'Quận Đồ Sơn',
+ 'Quận Dương Kinh',
+ 'Quận Hải An',
+ 'Quận Hồng Bàng',
+ 'Quận Kiến An',
+ 'Quận Lê Chân',
+ 'Quận Ngô Quyền'
+ ),
+ 'HOA-BINH' => array(
+ 'Huyện Cao Phong',
+ 'Huyện Đà Bắc',
+ 'Huyện Kim Bôi',
+ 'Huyện Kỳ Sơn',
+ 'Huyện Lạc Sơn',
+ 'Huyện Lạc Thủy',
+ 'Huyện Lương Sơn',
+ 'Huyện Mai Châu',
+ 'Huyện Tân Lạc',
+ 'Huyện Yên Thủy',
+ 'Thành phố Hòa Bình'
+ ),
+ 'HAU-GIANG' => array(
+ 'Huyện Châu Thành',
+ 'Huyện Châu Thành A',
+ 'Huyện Long Mỹ',
+ 'Huyện Phụng Hiệp',
+ 'Huyện Vị Thuỷ',
+ 'Thành phố Vị Thanh',
+ 'Thị xã Long Mỹ',
+ 'Thị xã Ngã Bảy'
+ ),
+ 'HUNG-YEN' => array(
+ 'Huyện Ân Thi',
+ 'Huyện Khoái Châu',
+ 'Huyện Kim Động',
+ 'Huyện Mỹ Hào',
+ 'Huyện Phù Cừ',
+ 'Huyện Tiên Lữ',
+ 'Huyện Văn Giang',
+ 'Huyện Văn Lâm',
+ 'Huyện Yên Mỹ',
+ 'Thành phố Hưng Yên'
+ ),
+ 'HO-CHI-MINH' => array(
+ 'Huyện Bình Chánh',
+ 'Huyện Cần Giờ',
+ 'Huyện Củ Chi',
+ 'Huyện Hóc Môn',
+ 'Huyện Nhà Bè',
+ 'Quận 1',
+ 'Quận 10',
+ 'Quận 11',
+ 'Quận 12',
+ 'Quận 2',
+ 'Quận 3',
+ 'Quận 4',
+ 'Quận 5',
+ 'Quận 6',
+ 'Quận 7',
+ 'Quận 8',
+ 'Quận 9',
+ 'Quận Bình Tân',
+ 'Quận Bình Thạnh',
+ 'Quận Gò Vấp',
+ 'Quận Phú Nhuận',
+ 'Quận Tân Bình',
+ 'Quận Tân Phú',
+ 'Quận Thủ Đức'
+ ),
+ 'KHANH-HOA' => array(
+ 'Huyện Cam Lâm',
+ 'Huyện Diên Khánh',
+ 'Huyện Khánh Sơn',
+ 'Huyện Khánh Vĩnh',
+ 'Huyện Trường Sa',
+ 'Huyện Vạn Ninh',
+ 'Thành phố Cam Ranh',
+ 'Thành phố Nha Trang',
+ 'Thị xã Ninh Hòa'
+ ),
+ 'KIEN-GIANG' => array(
+ 'Huyện An Biên',
+ 'Huyện An Minh',
+ 'Huyện Châu Thành',
+ 'Huyện Giang Thành',
+ 'Huyện Giồng Riềng',
+ 'Huyện Gò Quao',
+ 'Huyện Hòn Đất',
+ 'Huyện Kiên Hải',
+ 'Huyện Kiên Lương',
+ 'Huyện Phú Quốc',
+ 'Huyện Tân Hiệp',
+ 'Huyện U Minh Thượng',
+ 'Huyện Vĩnh Thuận',
+ 'Thành phố Rạch Giá',
+ 'Thị xã Hà Tiên'
+ ),
+ 'KON-TUM' => array(
+ 'Huyện Đắk Glei',
+ 'Huyện Đắk Hà',
+ 'Huyện Đắk Tô',
+ 'Huyện Ia H Drai',
+ 'Huyện Kon Plông',
+ 'Huyện Kon Rẫy',
+ 'Huyện Ngọc Hồi',
+ 'Huyện Sa Thầy',
+ 'Huyện Tu Mơ Rông',
+ 'Thành phố Kon Tum'
+ ),
+ 'LAI-CHAU' => array(
+ 'Huyện Mường Tè',
+ 'Huyện Nậm Nhùn',
+ 'Huyện Phong Thổ',
+ 'Huyện Sìn Hồ',
+ 'Huyện Tam Đường',
+ 'Huyện Tân Uyên',
+ 'Huyện Than Uyên',
+ 'Thành phố Lai Châu'
+ ),
+ 'LAO-CAI' => array(
+ 'Huyện Bắc Hà',
+ 'Huyện Bảo Thắng',
+ 'Huyện Bảo Yên',
+ 'Huyện Bát Xát',
+ 'Huyện Mường Khương',
+ 'Huyện Sa Pa',
+ 'Huyện Si Ma Cai',
+ 'Huyện Văn Bàn',
+ 'Thành phố Lào Cai'
+ ),
+ 'LANG-SON' => array(
+ 'Huyện Bắc Sơn',
+ 'Huyện Bình Gia',
+ 'Huyện Cao Lộc',
+ 'Huyện Chi Lăng',
+ 'Huyện Đình Lập',
+ 'Huyện Hữu Lũng',
+ 'Huyện Lộc Bình',
+ 'Huyện Tràng Định',
+ 'Huyện Văn Lãng',
+ 'Huyện Văn Quan',
+ 'Thành phố Lạng Sơn'
+ ),
+ 'LAM-DONG' => array(
+ 'Huyện Bảo Lâm',
+ 'Huyện Cát Tiên',
+ 'Huyện Đạ Huoai',
+ 'Huyện Đạ Tẻh',
+ 'Huyện Đam Rông',
+ 'Huyện Di Linh',
+ 'Huyện Đơn Dương',
+ 'Huyện Đức Trọng',
+ 'Huyện Lạc Dương',
+ 'Huyện Lâm Hà',
+ 'Thành phố Bảo Lộc',
+ 'Thành phố Đà Lạt'
+ ),
+ 'LONG-AN' => array(
+ 'Huyện Bến Lức',
+ 'Huyện Cần Đước',
+ 'Huyện Cần Giuộc',
+ 'Huyện Châu Thành',
+ 'Huyện Đức Hòa',
+ 'Huyện Đức Huệ',
+ 'Huyện Mộc Hóa',
+ 'Huyện Tân Hưng',
+ 'Huyện Tân Thạnh',
+ 'Huyện Tân Trụ',
+ 'Huyện Thạnh Hóa',
+ 'Huyện Thủ Thừa',
+ 'Huyện Vĩnh Hưng',
+ 'Thành phố Tân An',
+ 'Thị xã Kiến Tường'
+ ),
+ 'NAM-DINH' => array(
+ 'Huyện Giao Thủy',
+ 'Huyện Hải Hậu',
+ 'Huyện Mỹ Lộc',
+ 'Huyện Nam Trực',
+ 'Huyện Nghĩa Hưng',
+ 'Huyện Trực Ninh',
+ 'Huyện Vụ Bản',
+ 'Huyện Xuân Trường',
+ 'Huyện Ý Yên',
+ 'Thành phố Nam Định'
+ ),
+ 'NGHE-AN' => array(
+ 'Huyện Anh Sơn',
+ 'Huyện Con Cuông',
+ 'Huyện Diễn Châu',
+ 'Huyện Đô Lương',
+ 'Huyện Hưng Nguyên',
+ 'Huyện Kỳ Sơn',
+ 'Huyện Nam Đàn',
+ 'Huyện Nghi Lộc',
+ 'Huyện Nghĩa Đàn',
+ 'Huyện Quế Phong',
+ 'Huyện Quỳ Châu',
+ 'Huyện Quỳ Hợp',
+ 'Huyện Quỳnh Lưu',
+ 'Huyện Tân Kỳ',
+ 'Huyện Thanh Chương',
+ 'Huyện Tương Dương',
+ 'Huyện Yên Thành',
+ 'Thành phố Vinh',
+ 'Thị xã Cửa Lò',
+ 'Thị xã Hoàng Mai',
+ 'Thị xã Thái Hoà'
+ ),
+ 'NINH-BINH' => array(
+ 'Huyện Gia Viễn',
+ 'Huyện Hoa Lư',
+ 'Huyện Kim Sơn',
+ 'Huyện Nho Quan',
+ 'Huyện Yên Khánh',
+ 'Huyện Yên Mô',
+ 'Thành phố Ninh Bình',
+ 'Thành phố Tam Điệp'
+ ),
+ 'NINH-THUAN' => array(
+ 'Huyện Bác Ái',
+ 'Huyện Ninh Hải',
+ 'Huyện Ninh Phước',
+ 'Huyện Ninh Sơn',
+ 'Huyện Thuận Bắc',
+ 'Huyện Thuận Nam',
+ 'Thành phố Phan Rang-Tháp Chàm'
+ ),
+ 'PHU-THO' => array(
+ 'Huyện Cẩm Khê',
+ 'Huyện Đoan Hùng',
+ 'Huyện Hạ Hoà',
+ 'Huyện Lâm Thao',
+ 'Huyện Phù Ninh',
+ 'Huyện Tam Nông',
+ 'Huyện Tân Sơn',
+ 'Huyện Thanh Ba',
+ 'Huyện Thanh Sơn',
+ 'Huyện Thanh Thuỷ',
+ 'Huyện Yên Lập',
+ 'Thành phố Việt Trì',
+ 'Thị xã Phú Thọ'
+ ),
+ 'PHU-YEN' => array(
+ 'Huyện Đông Hòa',
+ 'Huyện Đồng Xuân',
+ 'Huyện Phú Hoà',
+ 'Huyện Sơn Hòa',
+ 'Huyện Sông Hinh',
+ 'Huyện Tây Hoà',
+ 'Huyện Tuy An',
+ 'Thành phố Tuy Hoà',
+ 'Thị xã Sông Cầu'
+ ),
+ 'QUANG-BINH' => array(
+ 'Huyện Bố Trạch',
+ 'Huyện Lệ Thủy',
+ 'Huyện Minh Hóa',
+ 'Huyện Quảng Ninh',
+ 'Huyện Quảng Trạch',
+ 'Huyện Tuyên Hóa',
+ 'Thành Phố Đồng Hới',
+ 'Thị xã Ba Đồn'
+ ),
+ 'QUANG-NAM' => array(
+ 'Huyện Bắc Trà My',
+ 'Huyện Đại Lộc',
+ 'Huyện Đông Giang',
+ 'Huyện Duy Xuyên',
+ 'Huyện Hiệp Đức',
+ 'Huyện Nam Giang',
+ 'Huyện Nam Trà My',
+ 'Huyện Nông Sơn',
+ 'Huyện Núi Thành',
+ 'Huyện Phú Ninh',
+ 'Huyện Phước Sơn',
+ 'Huyện Quế Sơn',
+ 'Huyện Tây Giang',
+ 'Huyện Thăng Bình',
+ 'Huyện Tiên Phước',
+ 'Thành phố Hội An',
+ 'Thành phố Tam Kỳ',
+ 'Thị xã Điện Bàn'
+ ),
+ 'QUANG-NGAI' => array(
+ 'Huyện Ba Tơ',
+ 'Huyện Bình Sơn',
+ 'Huyện Đức Phổ',
+ 'Huyện Lý Sơn',
+ 'Huyện Minh Long',
+ 'Huyện Mộ Đức',
+ 'Huyện Nghĩa Hành',
+ 'Huyện Sơn Hà',
+ 'Huyện Sơn Tây',
+ 'Huyện Sơn Tịnh',
+ 'Huyện Tây Trà',
+ 'Huyện Trà Bồng',
+ 'Huyện Tư Nghĩa',
+ 'Thành phố Quảng Ngãi'
+ ),
+ 'QUANG-NINH' => array(
+ 'Huyện Ba Chẽ',
+ 'Huyện Bình Liêu',
+ 'Huyện Cô Tô',
+ 'Huyện Đầm Hà',
+ 'Huyện Hải Hà',
+ 'Huyện Hoành Bồ',
+ 'Huyện Tiên Yên',
+ 'Huyện Vân Đồn',
+ 'Thành phố Cẩm Phả',
+ 'Thành phố Hạ Long',
+ 'Thành phố Móng Cái',
+ 'Thành phố Uông Bí',
+ 'Thị xã Đông Triều',
+ 'Thị xã Quảng Yên'
+ ),
+ 'QUANG-TRI' => array(
+ 'Huyện Cam Lộ',
+ 'Huyện Cồn Cỏ',
+ 'Huyện Đa Krông',
+ 'Huyện Gio Linh',
+ 'Huyện Hải Lăng',
+ 'Huyện Hướng Hóa',
+ 'Huyện Triệu Phong',
+ 'Huyện Vĩnh Linh',
+ 'Thành phố Đông Hà',
+ 'Thị xã Quảng Trị'
+ ),
+ 'SOC-TRANG' => array(
+ 'Huyện Châu Thành',
+ 'Huyện Cù Lao Dung',
+ 'Huyện Kế Sách',
+ 'Huyện Long Phú',
+ 'Huyện Mỹ Tú',
+ 'Huyện Mỹ Xuyên',
+ 'Huyện Thạnh Trị',
+ 'Huyện Trần Đề',
+ 'Thành phố Sóc Trăng',
+ 'Thị xã Ngã Năm',
+ 'Thị xã Vĩnh Châu'
+ ),
+ 'SON-LA' => array(
+ 'Huyện Bắc Yên',
+ 'Huyện Mai Sơn',
+ 'Huyện Mộc Châu',
+ 'Huyện Mường La',
+ 'Huyện Phù Yên',
+ 'Huyện Quỳnh Nhai',
+ 'Huyện Sông Mã',
+ 'Huyện Sốp Cộp',
+ 'Huyện Thuận Châu',
+ 'Huyện Vân Hồ',
+ 'Huyện Yên Châu',
+ 'Thành phố Sơn La'
+ ),
+ 'TAY-NINH' => array(
+ 'Huyện Bến Cầu',
+ 'Huyện Châu Thành',
+ 'Huyện Dương Minh Châu',
+ 'Huyện Gò Dầu',
+ 'Huyện Hòa Thành',
+ 'Huyện Tân Biên',
+ 'Huyện Tân Châu',
+ 'Huyện Trảng Bàng',
+ 'Thành phố Tây Ninh'
+ ),
+ 'THAI-BINH' => array(
+ 'Huyện Đông Hưng',
+ 'Huyện Hưng Hà',
+ 'Huyện Kiến Xương',
+ 'Huyện Quỳnh Phụ',
+ 'Huyện Thái Thụy',
+ 'Huyện Tiền Hải',
+ 'Huyện Vũ Thư',
+ 'Thành phố Thái Bình'
+ ),
+ 'THAI-NGUYEN' => array(
+ 'Huyện Đại Từ',
+ 'Huyện Định Hóa',
+ 'Huyện Đồng Hỷ',
+ 'Huyện Phú Bình',
+ 'Huyện Phú Lương',
+ 'Huyện Võ Nhai',
+ 'Thành phố Sông Công',
+ 'Thành phố Thái Nguyên',
+ 'Thị xã Phổ Yên'
+ ),
+ 'THANH-HOA' => array(
+ 'Huyện Bá Thước',
+ 'Huyện Cẩm Thủy',
+ 'Huyện Đông Sơn',
+ 'Huyện Hà Trung',
+ 'Huyện Hậu Lộc',
+ 'Huyện Hoằng Hóa',
+ 'Huyện Lang Chánh',
+ 'Huyện Mường Lát',
+ 'Huyện Nga Sơn',
+ 'Huyện Ngọc Lặc',
+ 'Huyện Như Thanh',
+ 'Huyện Như Xuân',
+ 'Huyện Nông Cống',
+ 'Huyện Quan Hóa',
+ 'Huyện Quan Sơn',
+ 'Huyện Quảng Xương',
+ 'Huyện Thạch Thành',
+ 'Huyện Thiệu Hóa',
+ 'Huyện Thọ Xuân',
+ 'Huyện Thường Xuân',
+ 'Huyện Tĩnh Gia',
+ 'Huyện Triệu Sơn',
+ 'Huyện Vĩnh Lộc',
+ 'Huyện Yên Định',
+ 'Thành phố Thanh Hóa',
+ 'Thị xã Bỉm Sơn',
+ 'Thị xã Sầm Sơn'
+ ),
+ 'THUA-THIEN-HUE' => array(
+ 'Huyện A Lưới',
+ 'Huyện Nam Đông',
+ 'Huyện Phong Điền',
+ 'Huyện Phú Lộc',
+ 'Huyện Phú Vang',
+ 'Huyện Quảng Điền',
+ 'Thành phố Huế',
+ 'Thị xã Hương Thủy',
+ 'Thị xã Hương Trà'
+ ),
+ 'TIEN-GIANG' => array(
+ 'Huyện Cái Bè',
+ 'Huyện Cai Lậy',
+ 'Huyện Châu Thành',
+ 'Huyện Chợ Gạo',
+ 'Huyện Gò Công Đông',
+ 'Huyện Gò Công Tây',
+ 'Huyện Tân Phú Đông',
+ 'Huyện Tân Phước',
+ 'Thành phố Mỹ Tho',
+ 'Thị xã Cai Lậy',
+ 'Thị xã Gò Công'
+ ),
+ 'TRA-VINH' => array(
+ 'Huyện Càng Long',
+ 'Huyện Cầu Kè',
+ 'Huyện Cầu Ngang',
+ 'Huyện Châu Thành',
+ 'Huyện Duyên Hải',
+ 'Huyện Tiểu Cần',
+ 'Huyện Trà Cú',
+ 'Thành phố Trà Vinh',
+ 'Thị xã Duyên Hải'
+ ),
+ 'TUYEN-QUANG' => array(
+ 'Huyện Chiêm Hóa',
+ 'Huyện Hàm Yên',
+ 'Huyện Lâm Bình',
+ 'Huyện Nà Hang',
+ 'Huyện Sơn Dương',
+ 'Huyện Yên Sơn',
+ 'Thành phố Tuyên Quang'
+ ),
+ 'VINH-LONG' => array(
+ 'Huyện Vũng Liêm',
+ 'Huyện Bình Tân',
+ 'Huyện Long Hồ',
+ 'Huyện Mang Thít',
+ 'Huyện Tam Bình',
+ 'Huyện Trà Ôn',
+ 'Thành phố Vĩnh Long',
+ 'Thị xã Bình Minh'
+ ),
+ 'VINH-PHUC' => array(
+ 'Huyện Bình Xuyên',
+ 'Huyện Lập Thạch',
+ 'Huyện Sông Lô',
+ 'Huyện Tam Đảo',
+ 'Huyện Tam Dương',
+ 'Huyện Vĩnh Tường',
+ 'Huyện Yên Lạc',
+ 'Thành phố Vĩnh Yên',
+ 'Thị xã Phúc Yên'
+ ),
+ 'YEN-BAI' => array(
+ 'Huyện Lục Yên',
+ 'Huyện Mù Căng Chải',
+ 'Huyện Trạm Tấu',
+ 'Huyện Trấn Yên',
+ 'Huyện Văn Chấn',
+ 'Huyện Văn Yên',
+ 'Huyện Yên Bình',
+ 'Thành phố Yên Bái',
+ 'Thị xã Nghĩa Lộ'
+ ),
+ );
+
+ return $cities;
+
+ }
+}
\ No newline at end of file
diff --git a/lib/wc-city-select/assets/js/city-select.js b/lib/wc-city-select/assets/js/city-select.js
new file mode 100644
index 0000000..6028a6e
--- /dev/null
+++ b/lib/wc-city-select/assets/js/city-select.js
@@ -0,0 +1,180 @@
+jQuery( function($) {
+
+ // wc_city_select_params is required to continue, ensure the object exists
+ // wc_country_select_params is used for select2 texts. This one is added by WC
+ if ( typeof wc_country_select_params === 'undefined' || typeof wc_city_select_params === 'undefined' ) {
+ return false;
+ }
+
+ function getEnhancedSelectFormatString() {
+ var formatString = {
+ formatMatches: function( matches ) {
+ if ( 1 === matches ) {
+ return wc_country_select_params.i18n_matches_1;
+ }
+
+ return wc_country_select_params.i18n_matches_n.replace( '%qty%', matches );
+ },
+ formatNoMatches: function() {
+ return wc_country_select_params.i18n_no_matches;
+ },
+ formatAjaxError: function() {
+ return wc_country_select_params.i18n_ajax_error;
+ },
+ formatInputTooShort: function( input, min ) {
+ var number = min - input.length;
+
+ if ( 1 === number ) {
+ return wc_country_select_params.i18n_input_too_short_1;
+ }
+
+ return wc_country_select_params.i18n_input_too_short_n.replace( '%qty%', number );
+ },
+ formatInputTooLong: function( input, max ) {
+ var number = input.length - max;
+
+ if ( 1 === number ) {
+ return wc_country_select_params.i18n_input_too_long_1;
+ }
+
+ return wc_country_select_params.i18n_input_too_long_n.replace( '%qty%', number );
+ },
+ formatSelectionTooBig: function( limit ) {
+ if ( 1 === limit ) {
+ return wc_country_select_params.i18n_selection_too_long_1;
+ }
+
+ return wc_country_select_params.i18n_selection_too_long_n.replace( '%qty%', limit );
+ },
+ formatLoadMore: function() {
+ return wc_country_select_params.i18n_load_more;
+ },
+ formatSearching: function() {
+ return wc_country_select_params.i18n_searching;
+ }
+ };
+
+ return formatString;
+ }
+
+ // Select2 Enhancement if it exists
+ if ( $().select2 ) {
+ var wc_city_select_select2 = function() {
+ $( 'select.city_select:visible' ).each( function() {
+ var select2_args = $.extend({
+ placeholderOption: 'first',
+ width: '100%'
+ }, getEnhancedSelectFormatString() );
+
+ $( this ).select2( select2_args );
+ });
+ };
+
+ wc_city_select_select2();
+
+ $( document.body ).bind( 'city_to_select', function() {
+ wc_city_select_select2();
+ });
+ }
+
+ /* City select boxes */
+ var cities_json = wc_city_select_params.cities.replace( /"/g, '"' );
+ var cities = $.parseJSON( cities_json );
+
+ $( 'body' ).on( 'country_to_state_changing', function(e, country, $container) {
+ var $statebox = $container.find( '#billing_state, #shipping_state, #calc_shipping_state' );
+ var state = $statebox.val();
+ $( document.body ).trigger( 'state_changing', [country, state, $container ] );
+ });
+
+ $( 'body' ).on( 'change', 'select.state_select, #calc_shipping_state', function() {
+ var $container = $( this ).closest( 'div' );
+ var country = $container.find( '#billing_country, #shipping_country, #calc_shipping_country' ).val();
+ var state = $( this ).val();
+
+ $( document.body ).trigger( 'state_changing', [country, state, $container ] );
+ });
+
+ $( 'body' ).on( 'state_changing', function(e, country, state, $container) {
+ var $citybox = $container.find( '#billing_city, #shipping_city, #calc_shipping_city' );
+
+ if ( cities[ country ] ) {
+ /* if the country has no states */
+ if( cities[country] instanceof Array) {
+ cityToSelect( $citybox, cities[ country ] );
+ } else if ( state ) {
+ if ( cities[ country ][ state ] ) {
+ cityToSelect( $citybox, cities[ country ][ state ] );
+ } else {
+ cityToInput( $citybox );
+ }
+ } else {
+ disableCity( $citybox );
+ }
+ } else {
+ cityToInput( $citybox );
+ }
+ });
+
+ /* Ajax replaces .cart_totals (child of .cart-collaterals) on shipping calculator */
+ if ( $( '.cart-collaterals' ).length && $( '#calc_shipping_state' ).length ) {
+ var calc_observer = new MutationObserver( function() {
+ $( '#calc_shipping_state' ).change();
+ });
+ calc_observer.observe( document.querySelector( '.cart-collaterals' ), { childList: true });
+ }
+
+ function cityToInput( $citybox ) {
+ if ( $citybox.is('input') ) {
+ $citybox.prop( 'disabled', false );
+ return;
+ }
+
+ var input_name = $citybox.attr( 'name' );
+ var input_id = $citybox.attr( 'id' );
+ var placeholder = $citybox.attr( 'placeholder' );
+
+ $citybox.parent().find( '.select2-container' ).remove();
+
+ $citybox.replaceWith( ' ' );
+ }
+
+ function disableCity( $citybox ) {
+ $citybox.val( '' ).change();
+ $citybox.prop( 'disabled', true );
+ }
+
+ function cityToSelect( $citybox, current_cities ) {
+ var value = $citybox.val();
+
+ if ( $citybox.is('input') ) {
+ var input_name = $citybox.attr( 'name' );
+ var input_id = $citybox.attr( 'id' );
+ var placeholder = $citybox.attr( 'placeholder' );
+
+ $citybox.replaceWith( ' ' );
+ //we have to assign the new object, because of replaceWith
+ $citybox = $('#'+input_id);
+ } else {
+ $citybox.prop( 'disabled', false );
+ }
+
+ var options = '';
+ for( var index in current_cities ) {
+ if ( current_cities.hasOwnProperty( index ) ) {
+ var cityName = current_cities[ index ];
+ options = options + '' + cityName + ' ';
+ }
+ }
+
+ $citybox.html( '' + wc_city_select_params.i18n_select_city_text + ' ' + options );
+
+ if ( $('option[value="'+value+'"]', $citybox).length ) {
+ $citybox.val( value ).change();
+ } else {
+ $citybox.val( '' ).change();
+ }
+
+ $( document.body ).trigger( 'city_to_select' );
+ }
+});
diff --git a/lib/wc-city-select/cities/CO.php b/lib/wc-city-select/cities/CO.php
new file mode 100644
index 0000000..0053f6e
--- /dev/null
+++ b/lib/wc-city-select/cities/CO.php
@@ -0,0 +1,1170 @@
+ array(
+ 'Leticia',
+ 'Puerto Nariño'
+ ),
+ 'ANT' => array(
+ 'Abejorral',
+ 'Abriaquí',
+ 'Alejandria',
+ 'Amagá',
+ 'Amalfi',
+ 'Andes',
+ 'Angelópolis',
+ 'Angostura',
+ 'Anorí',
+ 'Anzá',
+ 'Apartadó',
+ 'Arboletes',
+ 'Argelia',
+ 'Armenia',
+ 'Barbosa',
+ 'Bello',
+ 'Belmira',
+ 'Betania',
+ 'Betulia',
+ 'Bolívar',
+ 'Briceño',
+ 'Burítica',
+ 'Cáceres',
+ 'Caicedo',
+ 'Caldas',
+ 'Campamento',
+ 'Cañasgordas',
+ 'Caracolí',
+ 'Caramanta',
+ 'Carepa',
+ 'Carmen de Viboral',
+ 'Carolina',
+ 'Caucasia',
+ 'Chigorodó',
+ 'Cisneros',
+ 'Cocorná',
+ 'Concepción',
+ 'Concordia',
+ 'Copacabana',
+ 'Dabeiba',
+ 'Don Matías',
+ 'Ebéjico',
+ 'El Bagre',
+ 'Entrerríos',
+ 'Envigado',
+ 'Fredonia',
+ 'Frontino',
+ 'Giraldo',
+ 'Girardota',
+ 'Gómez Plata',
+ 'Granada',
+ 'Guadalupe',
+ 'Guarne',
+ 'Guatapé',
+ 'Heliconia',
+ 'Hispania',
+ 'Itagüí',
+ 'Ituango',
+ 'Jardín',
+ 'Jericó',
+ 'La Ceja',
+ 'La Estrella',
+ 'La Pintada',
+ 'La Unión',
+ 'Liborina',
+ 'Maceo',
+ 'Marinilla',
+ 'Medellín',
+ 'Montebello',
+ 'Murindó',
+ 'Mutatá',
+ 'Nariño',
+ 'Nechí',
+ 'Necoclí',
+ 'Olaya',
+ 'Peñol',
+ 'Peque',
+ 'Pueblorrico',
+ 'Puerto Berrío',
+ 'Puerto Nare',
+ 'Puerto Triunfo',
+ 'Remedios',
+ 'Retiro',
+ 'Ríonegro',
+ 'Sabanalarga',
+ 'Sabaneta',
+ 'Salgar',
+ 'San Andrés de Cuerquía',
+ 'San Carlos',
+ 'San Francisco',
+ 'San Jerónimo',
+ 'San José de Montaña',
+ 'San Juan de Urabá',
+ 'San Luís',
+ 'San Pedro',
+ 'San Pedro de Urabá',
+ 'San Rafael',
+ 'San Roque',
+ 'San Vicente',
+ 'Santa Bárbara',
+ 'Santa Fé de Antioquia',
+ 'Santa Rosa de Osos',
+ 'Santo Domingo',
+ 'Santuario',
+ 'Segovia',
+ 'Sonsón',
+ 'Sopetrán',
+ 'Támesis',
+ 'Tarazá',
+ 'Tarso',
+ 'Titiribí',
+ 'Toledo',
+ 'Turbo',
+ 'Uramita',
+ 'Urrao',
+ 'Valdivia',
+ 'Valparaiso',
+ 'Vegachí',
+ 'Venecia',
+ 'Vigía del Fuerte',
+ 'Yalí',
+ 'Yarumal',
+ 'Yolombó',
+ 'Yondó (Casabe)',
+ 'Zaragoza'
+ ),
+ 'ARA' => array(
+ 'Arauca',
+ 'Arauquita',
+ 'Cravo Norte',
+ 'Fortúl',
+ 'Puerto Rondón',
+ 'Saravena',
+ 'Tame'
+ ),
+ 'ATL' => array(
+ 'Baranoa',
+ 'Barranquilla',
+ 'Campo de la Cruz',
+ 'Candelaria',
+ 'Galapa',
+ 'Juan de Acosta',
+ 'Luruaco',
+ 'Malambo',
+ 'Manatí',
+ 'Palmar de Varela',
+ 'Piojo',
+ 'Polonuevo',
+ 'Ponedera',
+ 'Puerto Colombia',
+ 'Repelón',
+ 'Sabanagrande',
+ 'Sabanalarga',
+ 'Santa Lucía',
+ 'Santo Tomás',
+ 'Soledad',
+ 'Suan',
+ 'Tubará',
+ 'Usiacuri'
+ ),
+ 'BOL' => array(
+ 'Achí',
+ 'Altos del Rosario',
+ 'Arenal',
+ 'Arjona',
+ 'Arroyohondo',
+ 'Barranco de Loba',
+ 'Calamar',
+ 'Cantagallo',
+ 'Cartagena',
+ 'Cicuco',
+ 'Clemencia',
+ 'Córdoba',
+ 'El Carmen de Bolívar',
+ 'El Guamo',
+ 'El Peñon',
+ 'Hatillo de Loba',
+ 'Magangué',
+ 'Mahates',
+ 'Margarita',
+ 'María la Baja',
+ 'Mompós',
+ 'Montecristo',
+ 'Morales',
+ 'Norosí',
+ 'Pinillos',
+ 'Regidor',
+ 'Río Viejo',
+ 'San Cristobal',
+ 'San Estanislao',
+ 'San Fernando',
+ 'San Jacinto',
+ 'San Jacinto del Cauca',
+ 'San Juan de Nepomuceno',
+ 'San Martín de Loba',
+ 'San Pablo',
+ 'Santa Catalina',
+ 'Santa Rosa',
+ 'Santa Rosa del Sur',
+ 'Simití',
+ 'Soplaviento',
+ 'Talaigua Nuevo',
+ 'Tiquisio (Puerto Rico)',
+ 'Turbaco',
+ 'Turbaná',
+ 'Villanueva',
+ 'Zambrano'
+ ),
+ 'BOY' => array(
+ 'Almeida',
+ 'Aquitania',
+ 'Arcabuco',
+ 'Belén',
+ 'Berbeo',
+ 'Beteitiva',
+ 'Boavita',
+ 'Boyacá',
+ 'Briceño',
+ 'Buenavista',
+ 'Busbanza',
+ 'Caldas',
+ 'Campohermoso',
+ 'Cerinza',
+ 'Chinavita',
+ 'Chiquinquirá',
+ 'Chíquiza',
+ 'Chiscas',
+ 'Chita',
+ 'Chitaraque',
+ 'Chivatá',
+ 'Chívor',
+ 'Ciénaga',
+ 'Cómbita',
+ 'Coper',
+ 'Corrales',
+ 'Covarachía',
+ 'Cubará',
+ 'Cucaita',
+ 'Cuitiva',
+ 'Duitama',
+ 'El Cocuy',
+ 'El Espino',
+ 'Firavitoba',
+ 'Floresta',
+ 'Gachantivá',
+ 'Gámeza',
+ 'Garagoa',
+ 'Guacamayas',
+ 'Guateque',
+ 'Guayatá',
+ 'Guicán',
+ 'Izá',
+ 'Jenesano',
+ 'Jericó',
+ 'La Capilla',
+ 'La Uvita',
+ 'La Victoria',
+ 'Labranzagrande',
+ 'Macanal',
+ 'Maripí',
+ 'Miraflores',
+ 'Mongua',
+ 'Monguí',
+ 'Moniquirá',
+ 'Motavita',
+ 'Muzo',
+ 'Nobsa',
+ 'Nuevo Colón',
+ 'Oicatá',
+ 'Otanche',
+ 'Pachavita',
+ 'Páez',
+ 'Paipa',
+ 'Pajarito',
+ 'Panqueba',
+ 'Pauna',
+ 'Paya',
+ 'Paz de Río',
+ 'Pesca',
+ 'Pisva',
+ 'Puerto Boyacá',
+ 'Quipama',
+ 'Ramiriquí',
+ 'Ráquira',
+ 'Rondón',
+ 'Saboyá',
+ 'Sáchica',
+ 'Samacá',
+ 'San Eduardo',
+ 'San José de Pare',
+ 'San Luís de Gaceno',
+ 'San Mateo',
+ 'San Miguel de Sema',
+ 'San Pablo de Borbur',
+ 'Santa María',
+ 'Santa Rosa de Viterbo',
+ 'Santa Sofía',
+ 'Santana',
+ 'Sativanorte',
+ 'Sativasur',
+ 'Siachoque',
+ 'Soatá',
+ 'Socha',
+ 'Socotá',
+ 'Sogamoso',
+ 'Somondoco',
+ 'Sora',
+ 'Soracá',
+ 'Sotaquirá',
+ 'Susacón',
+ 'Sutamarchán',
+ 'Sutatenza',
+ 'Tasco',
+ 'Tenza',
+ 'Tibaná',
+ 'Tibasosa',
+ 'Tinjacá',
+ 'Tipacoque',
+ 'Toca',
+ 'Toguí',
+ 'Topagá',
+ 'Tota',
+ 'Tunja',
+ 'Tunungua',
+ 'Turmequé',
+ 'Tuta',
+ 'Tutasá',
+ 'Úmbita',
+ 'Ventaquemada',
+ 'Villa de Leiva',
+ 'Viracachá',
+ 'Zetaquirá'
+ ),
+ 'CAL' => array(
+ 'Aguadas',
+ 'Anserma',
+ 'Aranzazu',
+ 'Belalcázar',
+ 'Chinchiná',
+ 'Filadelfia',
+ 'La Dorada',
+ 'La Merced',
+ 'La Victoria',
+ 'Manizales',
+ 'Manzanares',
+ 'Marmato',
+ 'Marquetalia',
+ 'Marulanda',
+ 'Neira',
+ 'Norcasia',
+ 'Pácora',
+ 'Palestina',
+ 'Pensilvania',
+ 'Río Sucio',
+ 'Risaralda',
+ 'Salamina',
+ 'Samaná',
+ 'San José',
+ 'Supía',
+ 'Villamaría',
+ 'Viterbo'
+ ),
+ 'CAQ' => array(
+ 'Albania',
+ 'Belén de los Andaquíes',
+ 'Cartagena del Chairá',
+ 'Curillo',
+ 'El Doncello',
+ 'El Paujil',
+ 'Florencia',
+ 'La Montañita',
+ 'Milán',
+ 'Morelia',
+ 'Puerto Rico',
+ 'San José del Fragua',
+ 'San Vicente del Caguán',
+ 'Solano',
+ 'Solita',
+ 'Valparaiso'
+ ),
+ 'CAS' => array(
+ 'Aguazul',
+ 'Chámeza',
+ 'Hato Corozal',
+ 'La Salina',
+ 'Maní',
+ 'Monterrey',
+ 'Nunchía',
+ 'Orocué',
+ 'Paz de Ariporo',
+ 'Pore',
+ 'Recetor',
+ 'Sabanalarga',
+ 'Sácama',
+ 'San Luís de Palenque',
+ 'Támara',
+ 'Tauramena',
+ 'Trinidad',
+ 'Villanueva',
+ 'Yopal'
+ ),
+ 'CAU' => array(
+ 'Almaguer',
+ 'Argelia',
+ 'Balboa',
+ 'Bolívar',
+ 'Buenos Aires',
+ 'Cajibío',
+ 'Caldono',
+ 'Caloto',
+ 'Corinto',
+ 'El Tambo',
+ 'Florencia',
+ 'Guachené',
+ 'Guapí',
+ 'Inzá',
+ 'Jambaló',
+ 'La Sierra',
+ 'La Vega',
+ 'López (Micay)',
+ 'Mercaderes',
+ 'Miranda',
+ 'Morales',
+ 'Padilla',
+ 'Páez (Belalcazar)',
+ 'Patía (El Bordo)',
+ 'Piamonte',
+ 'Piendamó',
+ 'Popayán',
+ 'Puerto Tejada',
+ 'Puracé (Coconuco)',
+ 'Rosas',
+ 'San Sebastián',
+ 'Santa Rosa',
+ 'Santander de Quilichao',
+ 'Silvia',
+ 'Sotara (Paispamba)',
+ 'Suárez',
+ 'Sucre',
+ 'Timbío',
+ 'Timbiquí',
+ 'Toribío',
+ 'Totoró',
+ 'Villa Rica'
+ ),
+ 'CES' => array(
+ 'Aguachica',
+ 'Agustín Codazzi',
+ 'Astrea',
+ 'Becerríl',
+ 'Bosconia',
+ 'Chimichagua',
+ 'Chiriguaná',
+ 'Curumaní',
+ 'El Copey',
+ 'El Paso',
+ 'Gamarra',
+ 'Gonzalez',
+ 'La Gloria',
+ 'La Jagua de Ibirico',
+ 'La Paz (Robles)',
+ 'Manaure Balcón del Cesar',
+ 'Pailitas',
+ 'Pelaya',
+ 'Pueblo Bello',
+ 'Río de oro',
+ 'San Alberto',
+ 'San Diego',
+ 'San Martín',
+ 'Tamalameque',
+ 'Valledupar'
+ ),
+ 'CHO' => array(
+ 'Acandí',
+ 'Alto Baudó (Pie de Pato)',
+ 'Atrato (Yuto)',
+ 'Bagadó',
+ 'Bahía Solano (Mútis)',
+ 'Bajo Baudó (Pizarro)',
+ 'Belén de Bajirá',
+ 'Bojayá (Bellavista)',
+ 'Cantón de San Pablo',
+ 'Carmen del Darién (CURBARADÓ)',
+ 'Cértegui',
+ 'Condoto',
+ 'El Carmen de Atrato',
+ 'Istmina',
+ 'Juradó',
+ 'Lloró',
+ 'Medio Atrato',
+ 'Medio Baudó',
+ 'Medio San Juan (ANDAGOYA)',
+ 'Novita',
+ 'Nuquí',
+ 'Quibdó',
+ 'Río Iró',
+ 'Río Quito',
+ 'Ríosucio',
+ 'San José del Palmar',
+ 'Santa Genoveva de Docorodó',
+ 'Sipí',
+ 'Tadó',
+ 'Unguía',
+ 'Unión Panamericana (ÁNIMAS)'
+ ),
+ 'COR' => array(
+ 'Ayapel',
+ 'Buenavista',
+ 'Canalete',
+ 'Cereté',
+ 'Chimá',
+ 'Chinú',
+ 'Ciénaga de Oro',
+ 'Cotorra',
+ 'La Apartada y La Frontera',
+ 'Lorica',
+ 'Los Córdobas',
+ 'Momil',
+ 'Moñitos',
+ 'Montelíbano',
+ 'Monteria',
+ 'Planeta Rica',
+ 'Pueblo Nuevo',
+ 'Puerto Escondido',
+ 'Puerto Libertador',
+ 'Purísima',
+ 'Sahagún',
+ 'San Andrés Sotavento',
+ 'San Antero',
+ 'San Bernardo del Viento',
+ 'San Carlos',
+ 'San José de Uré',
+ 'San Pelayo',
+ 'Tierralta',
+ 'Tuchín',
+ 'Valencia'
+ ),
+ 'CUN' => array(
+ 'Agua de Dios',
+ 'Albán',
+ 'Anapoima',
+ 'Anolaima',
+ 'Apulo',
+ 'Arbeláez',
+ 'Beltrán',
+ 'Bituima',
+ 'Bogotá D.C.',
+ 'Bojacá',
+ 'Cabrera',
+ 'Cachipay',
+ 'Cajicá',
+ 'Caparrapí',
+ 'Cáqueza',
+ 'Carmen de Carupa',
+ 'Chaguaní',
+ 'Chía',
+ 'Chipaque',
+ 'Choachí',
+ 'Chocontá',
+ 'Cogua',
+ 'Cota',
+ 'Cucunubá',
+ 'El Colegio',
+ 'El Peñón',
+ 'El Rosal',
+ 'Facatativá',
+ 'Fómeque',
+ 'Fosca',
+ 'Funza',
+ 'Fúquene',
+ 'Fusagasugá',
+ 'Gachalá',
+ 'Gachancipá',
+ 'Gachetá',
+ 'Gama',
+ 'Girardot',
+ 'Granada',
+ 'Guachetá',
+ 'Guaduas',
+ 'Guasca',
+ 'Guataquí',
+ 'Guatavita',
+ 'Guayabal de Siquima',
+ 'Guayabetal',
+ 'Gutiérrez',
+ 'Jerusalén',
+ 'Junín',
+ 'La Calera',
+ 'La Mesa',
+ 'La Palma',
+ 'La Peña',
+ 'La Vega',
+ 'Lenguazaque',
+ 'Machetá',
+ 'Madrid',
+ 'Manta',
+ 'Medina',
+ 'Mosquera',
+ 'Nariño',
+ 'Nemocón',
+ 'Nilo',
+ 'Nimaima',
+ 'Nocaima',
+ 'Pacho',
+ 'Paime',
+ 'Pandi',
+ 'Paratebueno',
+ 'Pasca',
+ 'Puerto Salgar',
+ 'Pulí',
+ 'Quebradanegra',
+ 'Quetame',
+ 'Quipile',
+ 'Ricaurte',
+ 'San Antonio de Tequendama',
+ 'San Bernardo',
+ 'San Cayetano',
+ 'San Francisco',
+ 'San Juan de Río Seco',
+ 'Sasaima',
+ 'Sesquilé',
+ 'Sibaté',
+ 'Silvania',
+ 'Simijaca',
+ 'Soacha',
+ 'Sopó',
+ 'Subachoque',
+ 'Suesca',
+ 'Supatá',
+ 'Susa',
+ 'Sutatausa',
+ 'Tabio',
+ 'Tausa',
+ 'Tena',
+ 'Tenjo',
+ 'Tibacuy',
+ 'Tibirita',
+ 'Tocaima',
+ 'Tocancipá',
+ 'Topaipí',
+ 'Ubalá',
+ 'Ubaque',
+ 'Ubaté',
+ 'Une',
+ 'Útica',
+ 'Venecia (Ospina Pérez)',
+ 'Vergara',
+ 'Viani',
+ 'Villagómez',
+ 'Villapinzón',
+ 'Villeta',
+ 'Viotá',
+ 'Yacopí',
+ 'Zipacón',
+ 'Zipaquirá'
+ ),
+ 'GUA' => array( 'Inírida' ),
+ 'GUV' => array(
+ 'Calamar',
+ 'El Retorno',
+ 'Miraflores',
+ 'San José del Guaviare'
+ ),
+ 'HUI' => array(
+ 'Acevedo',
+ 'Agrado',
+ 'Aipe',
+ 'Algeciras',
+ 'Altamira',
+ 'Baraya',
+ 'Campoalegre',
+ 'Colombia',
+ 'Elías',
+ 'Garzón',
+ 'Gigante',
+ 'Guadalupe',
+ 'Hobo',
+ 'Íquira',
+ 'Isnos',
+ 'La Argentina',
+ 'La Plata',
+ 'Nátaga',
+ 'Neiva',
+ 'Oporapa',
+ 'Paicol',
+ 'Palermo',
+ 'Palestina',
+ 'Pital',
+ 'Pitalito',
+ 'Rivera',
+ 'Saladoblanco',
+ 'San Agustín',
+ 'Santa María',
+ 'Suaza',
+ 'Tarqui',
+ 'Tello',
+ 'Teruel',
+ 'Tesalia',
+ 'Timaná',
+ 'Villavieja',
+ 'Yaguará'
+ ),
+ 'LAG' => array(
+ 'Albania',
+ 'Barrancas',
+ 'Dibulla',
+ 'Distracción',
+ 'El Molino',
+ 'Fonseca',
+ 'Hatonuevo',
+ 'La Jagua del Pilar',
+ 'Maicao',
+ 'Manaure',
+ 'Riohacha',
+ 'San Juan del Cesar',
+ 'Uribia',
+ 'Urumita',
+ 'Villanueva'
+ ),
+ 'MAG' => array(
+ 'Algarrobo',
+ 'Aracataca',
+ 'Ariguaní (El Difícil)',
+ 'Cerro San Antonio',
+ 'Chivolo',
+ 'Ciénaga',
+ 'Concordia',
+ 'El Banco',
+ 'El Piñon',
+ 'El Retén',
+ 'Fundación',
+ 'Guamal',
+ 'Nueva Granada',
+ 'Pedraza',
+ 'Pijiño',
+ 'Pivijay',
+ 'Plato',
+ 'Puebloviejo',
+ 'Remolino',
+ 'Sabanas de San Angel (SAN ANGEL)',
+ 'Salamina',
+ 'San Sebastián de Buenavista',
+ 'San Zenón',
+ 'Santa Ana',
+ 'Santa Bárbara de Pinto',
+ 'Santa Marta',
+ 'Sitionuevo',
+ 'Tenerife',
+ 'Zapayán (PUNTA DE PIEDRAS)',
+ 'Zona Bananera (PRADO - SEVILLA)'
+ ),
+ 'MET' => array(
+ 'Acacías',
+ 'Barranca de Upía',
+ 'Cabuyaro',
+ 'Castilla la Nueva',
+ 'Cubarral',
+ 'Cumaral',
+ 'El Calvario',
+ 'El Castillo',
+ 'El Dorado',
+ 'Fuente de Oro',
+ 'Granada',
+ 'Guamal',
+ 'La Macarena',
+ 'Lejanías',
+ 'Mapiripan',
+ 'Mesetas',
+ 'Puerto Concordia',
+ 'Puerto Gaitán',
+ 'Puerto Lleras',
+ 'Puerto López',
+ 'Puerto Rico',
+ 'Restrepo',
+ 'San Carlos de Guaroa',
+ 'San Juan de Arama',
+ 'San Juanito',
+ 'San Martín',
+ 'Uribe',
+ 'Villavicencio',
+ 'Vista Hermosa'
+ ),
+ 'NAR' => array(
+ 'Albán (San José)',
+ 'Aldana',
+ 'Ancuya',
+ 'Arboleda (Berruecos)',
+ 'Barbacoas',
+ 'Belén',
+ 'Buesaco',
+ 'Chachaguí',
+ 'Colón (Génova)',
+ 'Consaca',
+ 'Contadero',
+ 'Córdoba',
+ 'Cuaspud (Carlosama)',
+ 'Cumbal',
+ 'Cumbitara',
+ 'El Charco',
+ 'El Peñol',
+ 'El Rosario',
+ 'El Tablón de Gómez',
+ 'El Tambo',
+ 'Francisco Pizarro',
+ 'Funes',
+ 'Guachavés',
+ 'Guachucal',
+ 'Guaitarilla',
+ 'Gualmatán',
+ 'Iles',
+ 'Imúes',
+ 'Ipiales',
+ 'La Cruz',
+ 'La Florida',
+ 'La Llanada',
+ 'La Tola',
+ 'La Unión',
+ 'Leiva',
+ 'Linares',
+ 'Magüi (Payán)',
+ 'Mallama (Piedrancha)',
+ 'Mosquera',
+ 'Nariño',
+ 'Olaya Herrera',
+ 'Ospina',
+ 'Policarpa',
+ 'Potosí',
+ 'Providencia',
+ 'Puerres',
+ 'Pupiales',
+ 'Ricaurte',
+ 'Roberto Payán (San José)',
+ 'Samaniego',
+ 'San Bernardo',
+ 'San Juan de Pasto',
+ 'San Lorenzo',
+ 'San Pablo',
+ 'San Pedro de Cartago',
+ 'Sandoná',
+ 'Santa Bárbara (Iscuandé)',
+ 'Sapuyes',
+ 'Sotomayor (Los Andes)',
+ 'Taminango',
+ 'Tangua',
+ 'Tumaco',
+ 'Túquerres',
+ 'Yacuanquer'
+ ),
+ 'NSA' => array(
+ 'Ábrego',
+ 'Arboledas',
+ 'Bochalema',
+ 'Bucarasica',
+ 'Cáchira',
+ 'Cácota',
+ 'Chinácota',
+ 'Chitagá',
+ 'Convención',
+ 'Cúcuta',
+ 'Cucutilla',
+ 'Durania',
+ 'El Carmen',
+ 'El Tarra',
+ 'El Zulia',
+ 'Gramalote',
+ 'Hacarí',
+ 'Herrán',
+ 'La Esperanza',
+ 'La Playa',
+ 'Labateca',
+ 'Los Patios',
+ 'Lourdes',
+ 'Mutiscua',
+ 'Ocaña',
+ 'Pamplona',
+ 'Pamplonita',
+ 'Puerto Santander',
+ 'Ragonvalia',
+ 'Salazar',
+ 'San Calixto',
+ 'San Cayetano',
+ 'Santiago',
+ 'Sardinata',
+ 'Silos',
+ 'Teorama',
+ 'Tibú',
+ 'Toledo',
+ 'Villa Caro',
+ 'Villa del Rosario'
+ ),
+ 'PUT' => array(
+ 'Colón',
+ 'Mocoa',
+ 'Orito',
+ 'Puerto Asís',
+ 'Puerto Caicedo',
+ 'Puerto Guzmán',
+ 'Puerto Leguízamo',
+ 'San Francisco',
+ 'San Miguel',
+ 'Santiago',
+ 'Sibundoy',
+ 'Valle del Guamuez',
+ 'Villagarzón'
+ ),
+ 'QUI' => array(
+ 'Armenia',
+ 'Buenavista',
+ 'Calarcá',
+ 'Circasia',
+ 'Cordobá',
+ 'Filandia',
+ 'Génova',
+ 'La Tebaida',
+ 'Montenegro',
+ 'Pijao',
+ 'Quimbaya',
+ 'Salento'
+ ),
+ 'RIS' => array(
+ 'Apía',
+ 'Balboa',
+ 'Belén de Umbría',
+ 'Dos Quebradas',
+ 'Guática',
+ 'La Celia',
+ 'La Virginia',
+ 'Marsella',
+ 'Mistrató',
+ 'Pereira',
+ 'Pueblo Rico',
+ 'Quinchía',
+ 'Santa Rosa de Cabal',
+ 'Santuario'
+ ),
+ 'SAP' => array( 'Providencia' ),
+ 'SAN' => array(
+ 'Aguada',
+ 'Albania',
+ 'Aratoca',
+ 'Barbosa',
+ 'Barichara',
+ 'Barrancabermeja',
+ 'Betulia',
+ 'Bolívar',
+ 'Bucaramanga',
+ 'Cabrera',
+ 'California',
+ 'Capitanejo',
+ 'Carcasí',
+ 'Cepita',
+ 'Cerrito',
+ 'Charalá',
+ 'Charta',
+ 'Chima',
+ 'Chipatá',
+ 'Cimitarra',
+ 'Concepción',
+ 'Confines',
+ 'Contratación',
+ 'Coromoro',
+ 'Curití',
+ 'El Carmen',
+ 'El Guacamayo',
+ 'El Peñon',
+ 'El Playón',
+ 'Encino',
+ 'Enciso',
+ 'Florián',
+ 'Floridablanca',
+ 'Galán',
+ 'Gámbita',
+ 'Girón',
+ 'Guaca',
+ 'Guadalupe',
+ 'Guapota',
+ 'Guavatá',
+ 'Guepsa',
+ 'Hato',
+ 'Jesús María',
+ 'Jordán',
+ 'La Belleza',
+ 'La Paz',
+ 'Landázuri',
+ 'Lebrija',
+ 'Los Santos',
+ 'Macaravita',
+ 'Málaga',
+ 'Matanza',
+ 'Mogotes',
+ 'Molagavita',
+ 'Ocamonte',
+ 'Oiba',
+ 'Onzaga',
+ 'Palmar',
+ 'Palmas del Socorro',
+ 'Páramo',
+ 'Pie de Cuesta',
+ 'Pinchote',
+ 'Puente Nacional',
+ 'Puerto Parra',
+ 'Puerto Wilches',
+ 'Rio Negro',
+ 'Sabana de Torres',
+ 'San Andrés',
+ 'San Benito',
+ 'San Gíl',
+ 'San Joaquín',
+ 'San José de Miranda',
+ 'San Miguel',
+ 'San Vicente del Chucurí',
+ 'Santa Bárbara',
+ 'Santa Helena del Opón',
+ 'Simacota',
+ 'Socorro',
+ 'Suaita',
+ 'Sucre',
+ 'Suratá',
+ 'Tona',
+ 'Valle de San José',
+ 'Vélez',
+ 'Vetas',
+ 'Villanueva',
+ 'Zapatoca'
+ ),
+ 'SUC' => array(
+ 'Buenavista',
+ 'Caimito',
+ 'Chalán',
+ 'Colosó (Ricaurte)',
+ 'Corozal',
+ 'Coveñas',
+ 'El Roble',
+ 'Galeras (Nueva Granada)',
+ 'Guaranda',
+ 'La Unión',
+ 'Los Palmitos',
+ 'Majagual',
+ 'Morroa',
+ 'Ovejas',
+ 'Palmito',
+ 'Sampués',
+ 'San Benito Abad',
+ 'San Juan de Betulia',
+ 'San Marcos',
+ 'San Onofre',
+ 'San Pedro',
+ 'Sincé',
+ 'Sincelejo',
+ 'Sucre',
+ 'Tolú',
+ 'Tolú Viejo'
+ ),
+ 'TOL' => array(
+ 'Alpujarra',
+ 'Alvarado',
+ 'Ambalema',
+ 'Anzoátegui',
+ 'Armero (Guayabal)',
+ 'Ataco',
+ 'Cajamarca',
+ 'Carmen de Apicalá',
+ 'Casabianca',
+ 'Chaparral',
+ 'Coello',
+ 'Coyaima',
+ 'Cunday',
+ 'Dolores',
+ 'Espinal',
+ 'Falan',
+ 'Flandes',
+ 'Fresno',
+ 'Guamo',
+ 'Herveo',
+ 'Honda',
+ 'Ibagué',
+ 'Icononzo',
+ 'Lérida',
+ 'Líbano',
+ 'Mariquita',
+ 'Melgar',
+ 'Murillo',
+ 'Natagaima',
+ 'Ortega',
+ 'Palocabildo',
+ 'Piedras',
+ 'Planadas',
+ 'Prado',
+ 'Purificación',
+ 'Rioblanco',
+ 'Roncesvalles',
+ 'Rovira',
+ 'Saldaña',
+ 'San Antonio',
+ 'San Luis',
+ 'Santa Isabel',
+ 'Suárez',
+ 'Valle de San Juan',
+ 'Venadillo',
+ 'Villahermosa',
+ 'Villarrica'
+ ),
+ 'VAC' => array(
+ 'Alcalá',
+ 'Andalucía',
+ 'Ansermanuevo',
+ 'Argelia',
+ 'Bolívar',
+ 'Buenaventura',
+ 'Buga',
+ 'Bugalagrande',
+ 'Caicedonia',
+ 'Cali',
+ 'Calima (Darién)',
+ 'Candelaria',
+ 'Cartago',
+ 'Dagua',
+ 'El Águila',
+ 'El Cairo',
+ 'El Cerrito',
+ 'El Dovio',
+ 'Florida',
+ 'Ginebra',
+ 'Guacarí',
+ 'Jamundí',
+ 'La Cumbre',
+ 'La Unión',
+ 'La Victoria',
+ 'Obando',
+ 'Palmira',
+ 'Pradera',
+ 'Restrepo',
+ 'Riofrío',
+ 'Roldanillo',
+ 'San Pedro',
+ 'Sevilla',
+ 'Toro',
+ 'Trujillo',
+ 'Tulúa',
+ 'Ulloa',
+ 'Versalles',
+ 'Vijes',
+ 'Yotoco',
+ 'Yumbo',
+ 'Zarzal'
+ ),
+ 'VAU' => array(
+ 'Carurú',
+ 'Mitú',
+ 'Taraira'
+ ),
+ 'VID' => array(
+ 'Cumaribo',
+ 'La Primavera',
+ 'Puerto Carreño',
+ 'Santa Rosalía'
+ ),
+);
diff --git a/lib/wc-city-select/readme.txt b/lib/wc-city-select/readme.txt
new file mode 100644
index 0000000..71644ce
--- /dev/null
+++ b/lib/wc-city-select/readme.txt
@@ -0,0 +1,79 @@
+=== WC City Select ===
+Contributors: mantish
+Donate link: mailto:paypal@8manos.com
+Tags: woocommerce, cities, city, city select, cities select, city dropdown, cities dropdown, woocommerce city, woocommerce cities
+Requires at least: 4.0
+Tested up to: 4.7.3
+Stable tag: 1.0.3
+WC requires at least: 2.2
+WC tested up to: 2.7.0
+License: GPLv2 or later
+License URI: http://www.gnu.org/licenses/gpl-2.0.html
+
+City Select for WooCommerce. Show a dropdown select as the cities input.
+
+== Description ==
+
+WooCommerce uses a text input for the customers to enter the city or town. With this plugin you can provide a list of cities to be shown as a select dropdown.
+
+This will be shown in checkout pages, edit addresses pages and shipping calculator if it's configured that way.
+
+A list of cities has to be loaded in the functions.php file (the plugin already includes cities from Colombia and Iran). Please check the Installation section for more info.
+
+### Github
+
+Contribute at https://github.com/8manos/wc-city-select
+
+== Installation ==
+
+1. Upload to the `/wp-content/plugins/` directory
+1. Activate the plugin through the 'Plugins' menu in WordPress
+1. Use `wc_city_select_cities` filter to load your cities. This is done similarly to [adding states/provinces](https://docs.woothemes.com/document/addmodify-states/). It should be added on your functions.php or a custom plugin.
+
+`
+add_filter( 'wc_city_select_cities', 'my_cities' );
+/**
+ * Replace XX with the country code. Instead of YYY, ZZZ use actual state codes.
+ */
+function my_cities( $cities ) {
+ $cities['XX'] = array(
+ 'YYY' => array(
+ 'City ',
+ 'Another City'
+ ),
+ 'ZZZ' => array(
+ 'City 3',
+ 'City 4'
+ )
+ );
+ return $cities;
+}
+`
+
+It's also possible to use a list of cities without grouping them by state:
+
+`
+add_filter( 'wc_city_select_cities', 'my_cities' );
+function my_cities( $cities ) {
+ $cities['XX'] = array(
+ 'City ',
+ 'Another City'
+ );
+ return $cities;
+}
+`
+
+== Changelog ==
+
+= 1.0.3 =
+* fix some issues when loading cities initially, that were causing warnings.
+
+= 1.0.2 =
+* fix some issues with shipping calculator and other edge cases.
+* Now works with countries that have no states, only cities.
+
+= 1.0.1 =
+* select2 enhancement when available. Adds a JS version of the select dropdown.
+
+= 1.0 =
+* First release.
diff --git a/lib/wc-city-select/wc-city-select.php b/lib/wc-city-select/wc-city-select.php
new file mode 100644
index 0000000..a14a620
--- /dev/null
+++ b/lib/wc-city-select/wc-city-select.php
@@ -0,0 +1,196 @@
+cities ) ) {
+ $this->load_country_cities();
+ }
+
+ if ( ! is_null( $cc ) ) {
+ return isset( $this->cities[ $cc ] ) ? $this->cities[ $cc ] : false;
+ } else {
+ return $this->cities;
+ }
+ }
+
+ public function load_country_cities() {
+ global $cities;
+
+ // Load only the city files the shop owner wants/needs.
+ $allowed = array_merge( WC()->countries->get_allowed_countries(), WC()->countries->get_shipping_countries() );
+
+ if ( $allowed ) {
+ foreach ( $allowed as $code => $country ) {
+ if ( ! isset( $cities[ $code ] ) && file_exists( $this->get_plugin_path() . '/cities/' . $code . '.php' ) ) {
+ include( $this->get_plugin_path() . '/cities/' . $code . '.php' );
+ }
+ }
+ }
+
+ $this->cities = apply_filters( 'wc_city_select_cities', $cities );
+ }
+
+ public function form_field_city( $field, $key, $args, $value ) {
+
+ // Do we need a clear div?
+ if ( ( ! empty( $args['clear'] ) ) ) {
+ $after = '
';
+ } else {
+ $after = '';
+ }
+
+ // Required markup
+ if ( $args['required'] ) {
+ $args['class'][] = 'validate-required';
+ $required = ' * ';
+ } else {
+ $required = '';
+ }
+
+ // Custom attribute handling
+ $custom_attributes = array();
+
+ if ( ! empty( $args['custom_attributes'] ) && is_array( $args['custom_attributes'] ) ) {
+ foreach ( $args['custom_attributes'] as $attribute => $attribute_value ) {
+ $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $attribute_value ) . '"';
+ }
+ }
+
+ // Validate classes
+ if ( ! empty( $args['validate'] ) ) {
+ foreach( $args['validate'] as $validate ) {
+ $args['class'][] = 'validate-' . $validate;
+ }
+ }
+
+ // field p and label
+ $field = '';
+ if ( $args['label'] ) {
+ $field .= '' . $args['label']. $required . ' ';
+ }
+
+ // Get Country
+ $country_key = $key == 'billing_city' ? 'billing_country' : 'shipping_country';
+ $current_cc = WC()->checkout->get_value( $country_key );
+
+ $state_key = $key == 'billing_city' ? 'billing_state' : 'shipping_state';
+ $current_sc = WC()->checkout->get_value( $state_key );
+
+ // Get country cities
+ $cities = $this->get_cities( $current_cc );
+
+ if ( is_array( $cities ) ) {
+
+ $field .= '
+ '. __( 'Select an option…', 'woocommerce' ) .' ';
+
+ if ( $current_sc && $cities[ $current_sc ] ) {
+ $dropdown_cities = $cities[ $current_sc ];
+ } else if ( is_array( reset($cities) ) ) {
+ $dropdown_cities = array_reduce( $cities, 'array_merge', array() );
+ sort( $dropdown_cities );
+ } else {
+ $dropdown_cities = $cities;
+ }
+
+ foreach ( $dropdown_cities as $city_name ) {
+ $field .= '' . $city_name .' ';
+ }
+
+ $field .= ' ';
+
+ } else {
+
+ $field .= ' ';
+ }
+
+ // field description and close wrapper
+ if ( $args['description'] ) {
+ $field .= '' . esc_attr( $args['description'] ) . ' ';
+ }
+
+ $field .= '
' . $after;
+
+ return $field;
+ }
+
+ public function load_scripts() {
+ if ( is_cart() || is_checkout() || is_wc_endpoint_url( 'edit-address' ) ) {
+
+ $city_select_path = $this->get_plugin_url() . 'assets/js/city-select.js';
+ wp_enqueue_script( 'wc-city-select', $city_select_path, array( 'jquery', 'woocommerce' ), self::VERSION, true );
+
+ $cities = json_encode( $this->get_cities() );
+ wp_localize_script( 'wc-city-select', 'wc_city_select_params', array(
+ 'cities' => $cities,
+ 'i18n_select_city_text' => esc_attr__( 'Select an option…', 'woocommerce' )
+ ) );
+ }
+ }
+
+ public function get_plugin_path() {
+
+ if ( $this->plugin_path ) {
+ return $this->plugin_path;
+ }
+
+ return $this->plugin_path = plugin_dir_path( __FILE__ );
+ }
+
+ public function get_plugin_url() {
+
+ if ( $this->plugin_url ) {
+ return $this->plugin_url;
+ }
+
+ return $this->plugin_url = plugin_dir_url( __FILE__ );
+ }
+ }
+
+ $GLOBALS['wc_city_select'] = new WC_City_Select();
+}
diff --git a/readme.txt b/readme.txt
index 4832c69..46295b2 100644
--- a/readme.txt
+++ b/readme.txt
@@ -2,7 +2,7 @@
Contributors: htdat
Tags: WooCommerce Vietnam, vietnam, vietnamese, vietnam provinces, paypal for vietnam dong, vnd, vietnam dong, vietnam currency, vietnam customization
Requires at least: 4.3
-Tested up to: 4.7
+Tested up to: 4.7.2
Stable tag: 1.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
@@ -19,6 +19,7 @@ Xem phiên bản tiếng Việt tại đây https://vi.wordpress.org/plugins/woo
* Change the VND currency symbol `đ` to anything, e.g: `VND`, `VNĐ`, `đồng`, etc.
* Add provinces for Vietnam when visitors select Vietnam as a country of the shipping (billing) address. This is not available in WooCommerce by default.
+* Add districts to Vietnam provinces.
* Convert `000` of prices to `K` (or anything). E.g: `50000` (VND) will be `50K` (VND), or `50 thousand` (VND).
* Support `VND` for [the PayPal Standard gateway](https://docs.woocommerce.com/document/paypal-standard/). Convert `VND` prices to any PayPal supported currency before sending visitors to the PayPal pages.
@@ -26,7 +27,7 @@ Xem phiên bản tiếng Việt tại đây https://vi.wordpress.org/plugins/woo
In the future, this plugin will add more and more features for the Vietnam market:
-* Integrate all districts to Vietnam provinces.
+* Integrate all districts to Vietnam provinces. (available since 1.2)
* Integrate at least one solution for collecting money by phone cards.
* Integrate the Vietnam payment gateways like 1Pay, OnePay, BaoKim, Ngan Luong, etc.
* Integrate the Vietnam shipping solutions like ShipChung, Giaohangnhanh, ViettelPost, etc.
@@ -69,6 +70,9 @@ Follow these steps to install and use the plugin:
== Changelog ==
+= 1.2 - 2017.03.03 =
+* Integrate all districts to Vietnam provinces. Credits: [WC City Select by 8manos](https://github.com/8manos/wc-city-select) and [the Vietnam district data by 10h30](https://github.com/htdat/woo-viet/issues/4#issuecomment-277449462)
+
= 1.1 =
* Replace all “WooCommerce for Vietnam” to “Woo Viet”
* Replace all “woocomerce-for-vietnam” to “woo-viet”
@@ -76,4 +80,9 @@ Follow these steps to install and use the plugin:
= 1.0 =
* First release.
-* Upload to WordPress.org
\ No newline at end of file
+* Upload to WordPress.org
+
+== Upgrade Notice ==
+
+= 1.2 =
+The new version 1.2 comes with the feature "Add districts to Vietnam provinces".
diff --git a/woo-viet.php b/woo-viet.php
index 237d540..e056150 100644
--- a/woo-viet.php
+++ b/woo-viet.php
@@ -40,6 +40,10 @@ class WooViet {
array(
'enabled' => 'yes',
),
+ 'add_city' =>
+ array(
+ 'enabled' => 'yes',
+ ),
'change_currency_symbol' =>
array(
'enabled' => 'yes',
@@ -112,7 +116,7 @@ class WooViet {
* @since 1.0
*/
public function i18n() {
- load_plugin_textdomain( 'freshfunbits', false, basename( dirname( __FILE__ ) ) . '/languages/' );
+ load_plugin_textdomain( 'woo-viet', false, basename( dirname( __FILE__ ) ) . '/languages/' );
}
/**
@@ -133,6 +137,12 @@ class WooViet {
if ( 'yes' == $settings['add_province']['enabled'] ) {
include( WOO_VIET_DIR . 'inc/class-wooviet-provinces.php' );
$this->Provinces = new WooViet_Provinces();
+
+ // Enable "Add cities for Vietnam" if the province option is selected.
+ if ( 'yes' == $settings['add_city']['enabled'] ) {
+ include( WOO_VIET_DIR . 'inc/class-wooviet-cities.php' );
+ new WooViet_Cities();
+ }
}
include( WOO_VIET_DIR . 'inc/class-wooviet-currency.php' );
@@ -165,7 +175,9 @@ class WooViet {
* @return array
*/
static function get_settings() {
- return get_option( 'woo-viet', self::$default_settings );
+ $settings = get_option( 'woo-viet', self::$default_settings );
+ $settings = wp_parse_args( $settings, self::$default_settings );
+ return $settings;
}
}
\ No newline at end of file