У нас есть служба написания статей, где клиенты могут заказать статьи по количеству слов. Если заказывается более 5000 слов (независимо от количества статей), мы применяем пониженную ставку. Моя скорректированная цена рассчитывается и отображается нормально, когда я нахожусь на странице отдельного продукта, странице корзины, странице оформления заказа, а также на всей серверной части. серверной части Wordpress в разделе Woocommerce> Заказы> Изменить порядок, я вижу, что плата за полосу не вычитается правильно из общей стоимости продукта.
Например: на прикрепленном изображении ниже вы можете видеть - 3,76 доллара США предполагается вычесть из общей суммы заказа 80 долларов. Выплата Stripe должна составлять 76,24 доллара, но вместо этого отображается 115,43 доллара.
введите описание изображения здесь
Ниже приведена функция, которую я использую для обновления цен. Я собрал его из онлайн-источников, и, похоже, он работает нормально (хотя, вероятно, не так эффективно, как мог бы), но я не совсем уверен, почему значение Stripe Payout рассчитывается неправильно.
add_action( 'woocommerce_before_calculate_totals', 'articles_alter_price_cart', 9999 );
function articles_alter_price_cart( $cart ) {
$grandTotalWords = 0;
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;
/* Loop through cart items and get grand total of words */
foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
$qty = $cart_item['quantity'];
$wordsPerArticle = $cart_item['variation']['attribute_number-of-words'];
$numWords = $wordsPerArticle * $qty;
$grandTotalWords += $numWords;
}
/* Update cart item prices based on grand total of words */
foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
$qty = $cart_item['quantity'];
$numWordsInput = $cart_item['variation']['attribute_number-of-words'];
$arr = explode(' Words', $numWordsInput);
$wordsPerArticle = $arr[0];
$numWords = $wordsPerArticle * $qty;
if ( $grandTotalWords != '' && $grandTotalWords > 0 ) {
if ( $grandTotalWords > 10000 ) {
$totalCost = $numWords * 0.125;
} elseif ( $grandTotalWords >= 5000 && $grandTotalWords <= 10000 ) {
$totalCost = $numWords * 0.15;
} else {
$totalCost = $numWords * 0.2;
}
}
$singleCost = $totalCost / $qty;
/* Tried setting type as string because totals are saved as strings apparently */
settype($singleCost, 'string');
$cart_item['data']->set_price( $singleCost );
}
}
Любая помощь приветствуется. Спасибо!