2014-09-06 3 views
1

Я разрабатываю веб-сайт Wordpress + Woocommerce для клиента. Ему нужны его клиенты, чтобы заплатить 30% от корзины заранее, затем они начинают готовить заказ.Вычисление вопроса по деталям заказов woocommerce

Поскольку Woocommerce не имеет встроенной функции предоплаты, я решил использовать купон, применяя автоматически 70% скидку на общую сумму заказа (тогда я скрою информацию о купонах).

Для тележки 1000 € клиент увидит: Total = 300€.
Затем я добавляю строку «Слева за оплатой» и показываю результат, делающий простой расчет в файле функции: $woocommerce->cart->subtotal - $woocommerce->cart->cart_contents_total;
В результате получается сумма скидки: 700 € в этом случае.

Проблема: Это прекрасно работает на корзину и оформления заказа страницы, но на странице заказа детальной количество «Оставшись платить» 0.

Это код отображения итогов по шаблон порядка-заказа (в woocommerce \ order).

<!-- show the totals on Order Details footer --> 
    <?php 
     if ($totals = $order->get_order_item_totals()) foreach ($totals as $total) : 
      ?> 
      <tr> 
       <th scope="row"><?php echo $total['label']; ?></th> 
       <td><?php echo $total['value']; ?></td> 
      </tr> 
      <?php 
     endforeach; 

    ?> 

<!-- Trying to add the Left to pay line here --> 
    <?php if ($totals = $order->get_order_item_totals()) { ?> 
     <tr class="order-total"> 
      <th>Left to pay</th> 
      <td><?php echo number_format(custom_Total_Solde(),2,'.','')."€"; ?></td> 
     </tr> 

    <?php }; ?> 

И вот код, который я использую для выполнения функций для расчета суммы «Оставайтесь платить».

function custom_Total_Solde() { 
    global $woocommerce; 
    $solde = $woocommerce->cart->subtotal - $woocommerce->cart->cart_contents_total; 
    return $solde; 
} 

Кто-нибудь знает, как итоги вычисляются по деталям заказа? Разве это не по телеге или кассе? Возможно, вы знаете, в каком шаблоне хранятся общие ярлыки данных-деталей заказа? Если я могу это найти, может быть, я могу понять, почему мои расчеты не работают в этой конкретной части ...

ответ

1

После того, как вы проверили, информация о тележке очищена, поэтому она не доступна для расчетов.

Вам необходимо изучить класс WC_Order в includes/class-wc-order.php.

$order->get_total() должен сообщить вам общую сумму уплаченной суммы. И, возможно, $order->get_total_discount() или $order->get_cart_discount() было бы тем, сколько осталось заплатить?

Или вы могли бы добавить некоторую пользовательскую мету в порядок, когда он был создан в кассе, используя следующий крюк:

do_action('woocommerce_checkout_update_order_meta', $order_id, $this->posted); 

Я слышал, что будущие версии WooCommerce будут поддерживать частичные платежи, но до тех пор вы также можете проверить WooCommerce Deposit Plugin

PS-global $woocommerce не рекомендуется, поэтому вам следует использовать вместо него WC().

+0

Вы рок! Большое спасибо! Я смотрел вокруг, но не уверен, почему '$ order-> get_cart_discount()' не работал в моих функциях. Я разместил его непосредственно на шаблоне php, и он работает. Я видел этот плагин для вкладов, но я хотел сохранить код как можно более простым и легким. Спасибо за информацию о 'global $ woocommerce', можете ли вы рассказать мне, как использовать' WC() 'в моей функции? (Я все еще изучаю php) – wyem

+1

Добро пожаловать. 'get_cart_discount()' является методом класса, поэтому для этого требуется объект класса (в этом случае переменная '$ order'). '$ order' доступен в шаблоне, но вам нужно создать' $ order = new WC_Order ($ order_id) ', чтобы использовать его в функциях. Вы используете 'WC()', просто заменяя все ваши экземпляры '$ woocommerce'' WC() '.ex: '$ woocommerce-> cart' становится' WC() -> cart'. – helgatheviking

Смежные вопросы