Bạn đang gặp phải vấn đề Region/State (Tỉnh/Thành phố) không hiển thị trên trang thanh toán của cửa hàng Magento 2? Điều này có thể gây khó khăn cho khách hàng trong việc cung cấp thông tin địa chỉ và dẫn đến lỗi khi thanh toán. Bài viết này sẽ cung cấp cho bạn các bước chi tiết để chẩn đoán và khắc phục triệt để vấn đề này, giúp cải thiện trải nghiệm người dùng và tăng tỷ lệ chuyển đổi.
Trước khi đi sâu vào các giải pháp kỹ thuật, hãy đảm bảo rằng bạn đã cấu hình đúng các cài đặt liên quan đến địa chỉ và khu vực trong Magento 2. Kiểm tra các mục sau:
Stores > Configuration > General > General > Country Options
.Stores > Configuration > Sales > Checkout
.Sau khi thay đổi bất kỳ cấu hình nào, hãy nhớ làm mới bộ nhớ cache của Magento 2 bằng cách đi đến System > Cache Management
và nhấp vào "Flush Magento Cache".
Nếu cấu hình không phải là vấn đề, rất có thể có lỗi JavaScript đang ngăn chặn trường Region/State hiển thị. Dưới đây là các bước để kiểm tra và khắc phục:
shipping.js
(nếu cần)Một số giải pháp được cộng đồng chia sẻ liên quan đến việc sửa đổi file shipping.js
. Hãy cẩn thận khi thực hiện việc này và luôn sao lưu file gốc trước khi thay đổi.
**Bước 1: Sao chép file gốc**
Sao chép file vendor/magento/module-checkout/view/frontend/web/js/view/shipping.js
.
**Bước 2: Tạo thư mục trong theme tùy chỉnh của bạn**
Tạo thư mục Magento_Checkout/web/js/view/
trong theme tùy chỉnh của bạn (ví dụ: app/design/frontend/[NameSpace]/[ThemeName]/Magento_Checkout/web/js/view/
).
**Bước 3: Dán file đã sao chép vào thư mục mới**
Dán file shipping.js
đã sao chép vào thư mục bạn vừa tạo.
**Bước 4: Sửa đổi hàm saveNewAddress
**
Tìm hàm saveNewAddress
trong file shipping.js
và thay thế nội dung của nó bằng đoạn code sau:
/**
* Save new shipping address
*/
saveNewAddress: function () {
var addressData,
newShippingAddress;
this.source.set('params.invalid', false);
this.triggerShippingDataValidateEvent();
if (!this.source.get('params.invalid')) {
addressData = this.source.get('shippingAddress');
// if user clicked the checkbox, its value is true or false. Need to convert.
addressData['save_in_address_book'] = this.saveInAddressBook ? 1 : 0;
if(addressData['region_id'] && $('[name="region_id"]').attr("aria-required")){
addressData['region'] = $('[name="region_id"]').find("option:selected").attr("data-title");
}else{
addressData['region'] = $('[name="region"]').val();
}
// New address must be selected as a shipping address
newShippingAddress = createShippingAddress(addressData);
selectShippingAddress(newShippingAddress);
checkoutData.setSelectedShippingAddress(newShippingAddress.getKey());
checkoutData.setNewCustomerShippingAddress($.extend(true, {}, addressData));
this.getPopUp().closeModal();
this.isNewAddressAdded(true);
}
},
**Bước 5: Xóa cache và kiểm tra lại**
Sau khi sửa đổi file, hãy chạy các lệnh sau để xóa cache và cập nhật static content:
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento setup:static-content:deploy -f
php bin/magento cache:clean
php bin/magento cache:flush
Nếu bạn đã thử các giải pháp trên mà vẫn không thành công, có thể vấn đề nằm ở sự xung đột giữa theme bạn đang sử dụng hoặc một extension nào đó. Hãy thử:
Lỗi Region/State không hiển thị trên trang thanh toán Magento 2 có thể xuất phát từ nhiều nguyên nhân khác nhau. Bằng cách kiểm tra cấu hình, sửa lỗi JavaScript, và loại trừ xung đột từ theme hoặc extension, bạn có thể tìm ra giải pháp phù hợp cho cửa hàng của mình. Đừng quên kiểm tra kỹ lưỡng sau mỗi thay đổi để đảm bảo mọi thứ hoạt động trơn tru.
Hy vọng bài viết này hữu ích cho bạn! Nếu bạn có bất kỳ câu hỏi nào, đừng ngần ngại để lại bình luận bên dưới.
Bài viết liên quan