這可能是因爲multishipping的。
Magento收集每個地址的總計。在默認情況下,報價有兩個地址:帳單地址和送貨地址。 我還沒有嘗試過你鏈接的例子,但afaiks費用將被應用兩次。由於某種原因,這並未顯示在前端,但我也遇到了兩次收費的問題,但不知何故仍然在前端正確顯示。
我假設有多個訂單時,仍然只有一個帳單地址。因此,下面的片段應該可以解決其定製費用的問題/加折扣兩次:
$address = $shippingAssignment->getShipping()->getAddress();
if($address->getAddressType() != 'billing'){
return $this;
}
或者,如果你只是想用項目申請費用/收費出貨:
$allBaseTotals = $total->getAllBaseTotalAmounts();
if(!isset($allBaseTotals['subtotal']) || $allBaseTotals['subtotal'] <= 0){
return $this;
}
這意味着在您鏈接的教程中的示例文件會變成這樣: app/code/Magestore/Webpos/Model/Total/Quote/Custom.php
/**
* @param \Magento\Quote\Model\Quote $quote
* @param \Magento\Quote\Api\Data\ShippingAssignmentInterface $shippingAssignment
* @param \Magento\Quote\Model\Quote\Address\Total $total
* @return $this|bool
*/
public function collect(
\Magento\Quote\Model\Quote $quote,
\Magento\Quote\Api\Data\ShippingAssignmentInterface $shippingAssignment,
\Magento\Quote\Model\Quote\Address\Total $total
)
{
parent::collect($quote, $shippingAssignment, $total);
$address = $shippingAssignment->getShipping()->getAddress();
if($address->getAddressType() != 'billing'){
return $this;
}
$baseDiscount = 10;
$discount = $this->_priceCurrency->convert($baseDiscount);
$total->addTotalAmount('customdiscount', -$discount);
$total->addBaseTotalAmount('customdiscount', -$baseDiscount);
$total->setBaseGrandTotal($total->getBaseGrandTotal() - $baseDiscount);
$quote->setCustomDiscount(-$discount);
return $this;
}
編輯: 看起來if($address->getAddressType() != 'billing'){
不工作,因爲我認爲它會。 我現在使用的是if($address->getAddressType() == 'billing'){
,因爲我沒有使用多剪貼簿。
嗨,我也面臨同樣的問題..你有這個問題的任何解決方案? –