在WooCommerce PDF发票和装箱单模板中获取未格式化的订单总额

时间:2018-11-29 19:41:03

标签: php wordpress templates pdf woocommerce

我已经制作了一份简单发票(这是默认发票)的副本,并创建了一个新发票,我的问题是我无法将字符串值转换为浮点型。这是代码:

<?php foreach( $this->get_woocommerce_totals() as $key => $total ) : ?>
    <tr class="<?php echo $key; ?>">
        <td class="no-borders"></td>
        <th class="description"><?php echo $total['label']; ?></th>
        <td class="price"><span class="totals-price"><?php echo $total['value']; ?></span></td>
    </tr>
<?php endforeach; ?>

the $total['value'];以字符串格式显示价格。

我尝试使用(float)$total['label']floatval($total['label'])进行强制转换,但是没有用,它的返回值为0。

1 个答案:

答案 0 :(得分:0)

您无法真正做到这一点,但可以使用$key来定位total line type,也可以使用$this->order的实例WC_Order任何WC_Order方法的对象。

要获取未格式化的总计总额(含税),您将使用$this->order->get_total()

  

一些可用的$keys是:

     
      
  • cart_subtotal
  •   
  • discount (如果应用了优惠券)
  •   
  • shipping
  •   
  • fee_1234 (如果要收费的话,其中1234是商品ID,可能会有很多不同)
  •   
  • tax(取决于税金在您的设置上的显示方式)
  •   
  • payment_method(似乎被某些CSS隐藏了)
  •   
  • order_total
  •   

所以在这段代码中:

<?php
    // The line totals data array (in a variable)
    $wc_totals = $this->get_woocommerce_totals();

    // Some order unformatted amounts
    $order_total     = $this->order->get_total(); 
    $order_total_tax = $this->order->get_total_tax();

    ## Manipulating amounts (example) ##

    // Order Total (rounding total amount)
    $wc_totals['order_total']['value'] = strip_tags( wc_price( round( $order_total ) ) );
?>
<?php foreach( $wc_totals as $key => $total ) : ?>
    <tr class="<?php echo $key; ?>">
        <td class="no-borders"></td>
        <th class="description"><?php echo $total['label']; ?></th>
        <td class="price"><span class="totals-price"><?php echo $total['value']; ?></span></td>
    </tr>
<?php endforeach; ?>

经过测试可以正常工作。

  

您还可以添加其他总计行或使用unset()和正确的键将其删除...

要在运输总行之后添加行(示例):

 <?php
    // The line totals data array (in a variable)
    $wc_totals = $this->get_woocommerce_totals();

    $wc_new_totals = []; // Initialising

    foreach ( $wc_totals as $key => $total ) {
        $wc_new_totals[$key] = $total;

        if ( $key === 'shipping' ) {
            $wc_new_totals['shipping_avg'] = [
                'label' => __( "Shipping average" ),
                'value' => __( "15 days" ),
            ];
        }
    }
?>
<?php foreach( $wc_new_totals as $key => $total ) : ?>
    <tr class="<?php echo $key; ?>">
        <td class="no-borders"></td>
        <th class="description"><?php echo $total['label']; ?></th>
        <td class="price"><span class="totals-price"><?php echo $total['value']; ?></span></td>
    </tr>
<?php endforeach; ?>