首页 文章

WooCommerce - 在订单循环中转换购物车循环以获取pdf发票

提问于
浏览
3

我在“https://woocommerce.com/products/print-invoices-packing-lists/”使用woocommerce和"Print Invoices & Packing lists" . 为了显示woocommerce购物车和结帐页面中的总节省数量,我使用此代码并完美运行:

function bbloomer_wc_discount_total() {

    global $woocommerce;

    $cart_subtotal = $woocommerce->cart->cart_contents;

    $discount_total = 0;

  foreach ($woocommerce->cart->cart_contents as $product_data) {

        if ($product_data['variation_id'] > 0) {
            $product = wc_get_product( $product_data['variation_id'] );
        } else {
            $product = wc_get_product( $product_data['product_id'] );
        }

        if ( !empty($product->sale_price) ) {
        $discount = ($product->regular_price - $product->sale_price) * $product_data['quantity'];
        $discount_total += $discount;
        }

    }

    if ( $discount_total > 0 ) {
    echo '<tr class="cart-discount">
    <th>'. __( 'Total Saving :', 'woocommerce' ) .'</th>
    <td data-title=" '. __( 'Total Saving :', 'woocommerce' ) .' ">'
    . wc_price($discount_total+$woocommerce->cart->discount_cart) .'</td>
    </tr>';
    }
}

add_action( 'woocommerce_cart_totals_after_order_total', 'bbloomer_wc_discount_total');
add_action( 'woocommerce_review_order_after_order_total', 'bbloomer_wc_discount_total');

此功能基于woocommerce购物车内容 . 如何显示打印发票和装箱单生成的Html发票中的总节省量插件(基于订单而不是购物车内容)插件中的挂钩如下:

add_action('wc_pip_after_header','bbloomer_wc_discount_total'); add_action('wc_pip_document_header','bbloomer_wc_discount_total');

1 回答

  • 2

    — Update 2 — (添加了WooCommerce版本3的兼容性)

    现在我知道您正在使用WooCommerce PDF发票和装箱单插件 .

    此代码只能在开头的 invoice.php PIP模板中直接使用,由此替换 <?php global $wpo_wcpdf ?>

    <?php 
    
        global $wpo_wcpdf, $woocommerce;
    
        // Get the order object
        $_order = $wpo_wcpdf->export->order;
    
        foreach ( $_order->get_items() as $item ) {
            // Added WC 3+ compatibility
            $quantity = method_exists( $item, 'get_quantity' ) ? $item->get_quantity() : $item['quantity'];
            $variation_id = method_exists( $item, 'get_variation_id' ) ? $item->get_variation_id() : $item['variation_id'];
            $_product = version_compare( WC_VERSION, '3.0', '<' ) ? wc_get_product( $item['product_id'] ) : $item->get_product();
    
            // Get the product object when it's a product variation ( Before version WC 3+)
            if ( version_compare( WC_VERSION, '3.0', '<' ) ) 
                if ($item['variation_id'] > 0) $_product = wc_get_product( $item['variation_id'] );
    
            // Get prices
            $sale_price = $_product->get_sale_price();
            $regular_price = $_product->get_regular_price();
    
            // Only when sale price exits
            if ( ! empty( $sale_price ) && $sale_price > 0 ) {
                $discount = ($regular_price - $sale_price) * $item->get_quantity();
                $discount_total += $discount;
            }
    
        }
        if ( $discount_total > 0 ) {
            $display_discount = '<tr class="cart-discount">
                <th>'. __( 'Total you saved :', 'woocommerce' ) .'</th>
                <td data-title=" '. __( 'Total you saved :', 'woocommerce' ) .' ">' . wc_price( $discount_total + $_order->get_total_discount() ) .'</td>
            </tr>';
        }
    
    ?>
    

    然后你可以在模板中使用它来输出它,这样(在html内部):

    <?php echo $display_discount; ?>
    

    或者(在PHP代码中):

    echo $display_discount;
    

    此代码经过测试和运行 .

相关问题