あなたの質問に基づいて、私はあなたがすでにあなたの拡張属性を設定していると仮定しています。私は同様の修正を実施しましたが、うまくいけば私の答えが役立ちます。
カスタムモジュールでrequirejs-configファイルを作成して、デフォルトの配送プロセッサ/デフォルトを拡張します
名前空間/CustomModule/view/frontend/requirejs-config.js
var config = {
「マップ」:{
「*」:{
'Magento_Checkout / js / model / shipping-save-processor / default': 'Namespace_CustomModule / js / model / shipping-save-processor / default'
}
}
};
拡張属性をペイロードに追加します。
/ * global define、alert * /
define(
[
「jquery」、
「ko」、
'Magento_Checkout / js / model / quote'、
'Magento_Checkout / js / model / resource-url-manager'、
「メイジ/ストレージ」、
「Magento_Checkout / js / model / payment-service」、
'Magento_Checkout / js / model / payment / method-converter'、
'Magento_Checkout / js / model / error-processor'、
'Magento_Checkout / js / model / full-screen-loader'、
'Magento_Checkout / js / action / select-billing-address'
]、
関数 (
$、
コ、
見積もり、
resourceUrlManager、
ストレージ、
paymentService、
methodConverter、
errorProcessor、
fullScreenLoader、
selectBillingAddressAction
){
'use strict';
return {
saveShippingInformation:関数(){
varペイロード;
if(!quote.billingAddress()){
selectBillingAddressAction(quote.shippingAddress());
}
//配送先住所に拡張属性を追加します
ペイロード= {
住所情報: {
shipping_address:quote.shippingAddress()、
billing_address:quote.billingAddress()、
shipping_method_code:quote.shippingMethod()。method_code、
shipping_carrier_code:quote.shippingMethod()。carrier_code、
extension_attributes:{
custom_field:$( '#custom_field')。val()、
}
}
};
fullScreenLoader.startLoader();
return storage.post(
resourceUrlManager.getUrlForSetShippingInformation(quote)、
JSON.stringify(ペイロード)
).done(
関数(応答){
quote.setTotals(response.totals);
paymentService.setPaymentMethods(methodConverter(response.payment_methods));
fullScreenLoader.stopLoader();
}
)。失敗します(
関数(応答){
errorProcessor.process(response);
fullScreenLoader.stopLoader();
}
);
}
};
}
);
プラグインを使用して、属性を見積もりに保存します(ここでオブザーバーを使用できるかどうかは確認していません)。
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>
SaveAddressInformation.php
クラスSaveAddressInformation
{
保護された$ quoteRepository;
パブリック関数__construct(
\ Magento \ Quote \ Model \ QuoteRepository $ quoteRepository
){
$ this-> quoteRepository = $ quoteRepository;
}
/ **
* @param \ Magento \ Checkout \ Model \ ShippingInformationManagement $ subject
* @param $ cartId
* @param \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface $ addressInformation
* /
パブリック関数beforeSaveAddressInformation(
\ Magento \ Checkout \ Model \ ShippingInformationManagement $ subject、
$ cartId、
\ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface $ addressInformation
){
$ extensionAttributes = $ addressInformation-> getExtensionAttributes();
$ customField = $ extensionAttributes-> getCustomField();
$ quote = $ this-> quoteRepository-> getActive($ cartId);
$ quote-> setCustomField($ customField);
}
}
Observer events.xmlを使用して注文に属性を保存します
<?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
SaveCustomFieldToOrderクラスはObserverInterfaceを実装します
{
/ **
* @var \ Magento \ Framework \ ObjectManagerInterface
* /
protected $ _objectManager;
/ **
* @param \ Magento \ Framework \ ObjectManagerInterface $ objectmanager
* /
パブリック関数__construct(\ Magento \ Framework \ ObjectManagerInterface $ objectmanager)
{
$ this-> _ objectManager = $ objectmanager;
}
パブリック関数execute(EventObserver $ observer)
{
$ order = $ observer-> getOrder();
$ quoteRepository = $ this-> _ objectManager-> create( 'Magento \ Quote \ Model \ QuoteRepository');
/ ** @var \ Magento \ Quote \ Model \ Quote $ quote * /
$ quote = $ quoteRepository-> get($ order-> getQuoteId());
$ order-> setCustomField($ quote-> getCustomField());
$ thisを返します。
}
}