Dựa trên câu hỏi của bạn, tôi theo giả định rằng bạn đã thiết lập các thuộc tính mở rộng của mình. Tôi đã thực hiện một sửa đổi tương tự và hy vọng câu trả lời của tôi sẽ giúp.
Trong mô-đun Tùy chỉnh của bạn, hãy tạo tệp Yêu cầu cấu hình để mở rộng bộ xử lý vận chuyển mặc định / mặc định
Không gian tên / CustomModule / view / frontend / allowjs-config.js
cấu hình var = {
"bản đồ": {
"*": {
'Magento_Checkout / js / model / Shipping-save-bộ xử lý / mặc định': 'Namespace_CustomModule / js / model / Shipping-save-bộ xử lý / mặc định'
}
}
};
Thêm thuộc tính mở rộng của bạn vào tải trọng.
/ * định nghĩa toàn cầu, cảnh báo * /
định nghĩa(
[
'Giễu cợt',
'không'
'Magento_Checkout / js / model / quote',
'Magento_Checkout / js / model / resource-url-manager',
'Pháp sư / lưu trữ',
'Magento_Checkout / js / model / dịch vụ thanh toán',
'Magento_Checkout / js / mô hình / thanh toán / chuyển đổi phương thức',
'Magento_Checkout / js / model / bộ xử lý lỗi',
'Magento_Checkout / js / model / trình tải toàn màn hình',
'Magento_Checkout / js / hành động / chọn địa chỉ thanh toán'
],
chức năng (
$,
không,
Trích dẫn,
tài nguyên quản lý,
lưu trữ,
Dịch vụ thanh toán,
phương thứcConverter,
bộ xử lý lỗi,
fullScreenLoader,
chọnBillingAddressAction
) {
'Sử dụng nghiêm ngặt';
trở về {
saveShippingIn information: function () {
tải trọng var;
if (! quote.billingAddress ()) {
chọnBillingAddressAction (quote.shippingAddress ());
}
// Thêm thuộc tính mở rộng vào địa chỉ giao hàng của bạn
tải trọng = {
địa chỉ Thông tin: {
Shipping_address: quote.shippingAddress (),
Billing_address: quote.billingAddress (),
Shipping_method_code: quote.shippingMethod (). method_code,
Shipping_carrier_code: quote.shippingMethod (). Carrier_code,
extension_attribut: {
custom_field: $ ('# custom_field'). val (),
}
}
};
fullScreenLoader.startLoader ();
trả lại dung lượng.post (
resourceUrlManager.getUrlForSetShippingIn information (quote),
JSON.opesify (tải trọng)
).làm xong(
hàm (phản hồi) {
quote.setTotals (answer.totals);
PaymentService.setPaymentMethods (methodConverter (answer.payment_methods));
fullScreenLoader.stopLoader ();
}
).Thất bại(
hàm (phản hồi) {
errorProcessor. process (hồi đáp);
fullScreenLoader.stopLoader ();
}
);
}
};
}
);
Lưu thuộc tính vào Trích dẫn của bạn bằng một plugin (Không chắc bạn có thể sử dụng trình quan sát ở đây tôi chưa kiểm tra).
di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Checkout\Model\ShippingInformationManagement">
<plugin name="Namespace_CustomModule_save_delivery_date_in_quote" type="Namespace\CustomModule\Plugin\Checkout\SaveAddressInformation" />
</type>
</config>
SaveAddressIn information.php
lớp SaveAddressThông tin
{
được bảo vệ $ quoteRep repository;
chức năng công cộng __construct (
\ Magento \ Trích dẫn \ Mô hình \ Trích dẫn $ quoteRep repository
) {
$ this-> quoteRep repository = $ quoteRep repository;
}
/ **
* @param \ Magento \ Checkout \ Model \ ShippingIn informationQuản lý $ chủ đề
* @param $ cartId
* @param \ Magento \ Checkout \ Api \ Data \ ShippingIn informationInterface $ addressIn information
* /
chức năng công khai trướcSaveAddressIn information (
\ Magento \ Checkout \ Model \ ShippingIn informationQuản lý $ chủ đề,
$ cartId,
\ Magento \ Checkout \ Api \ Data \ ShippingIn informationInterface $ addressIn information
) {
$ extensionAttribut = $ addressIn information-> getExtensionAttribut ();
$ customField = $ extensionAttribut-> getCustomField ();
$ quote = $ this-> quoteRep repository-> getActive ($ cartId);
$ quote-> setCustomField ($ customField);
}
}
Lưu thuộc tính vào đơn đặt hàng của bạn với một sự kiện Observer
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="sales_model_service_quote_submit_before">
<observer name="unique_observer_name" instance="Namespace\CustomModule\Observer\SaveCustomFieldToOrder"/>
</event>
</config>
SaveCustomFieldToOrder.php
lớp SaveCustomFieldToOrder thực hiện ObserverInterface
{
/ **
* @var \ Magento \ Framework \ ObjectManagerInterface
* /
được bảo vệ $ _objectManager;
/ **
* @param \ Magento \ Framework \ ObjectManagerInterface $ objectmanager
* /
hàm công khai __construct (\ Magento \ Framework \ ObjectManagerInterface $ objectmanager)
{
$ this -> _ objectManager = $ objectmanager;
}
thực thi chức năng công cộng (EventObserver $ observer)
{
$ order = $ observer-> getOrder ();
$ quoteRep repository = $ this -> _ objectManager-> create ('Magento \ quote \ Model \ quoteRep repository');
/ ** @var \ Magento \ Trích dẫn \ Mô hình \ Trích dẫn $ quote * /
$ quote = $ quoteRep repository-> get ($ order-> getQuoteId ());
$ order-> setCustomField ($ quote-> getCustomField ());
trả lại $ này;
}
}