TomaszKub
TomaszKub

Reputation: 37

Display the discounted subtotal after discount on pdf invoice in Woocommerce

I want to display the cost of the product after a discount coupon on the invoice. I have the following code, but it displays only base price, not the cost after coupon code:

add_filter( 'wpo_wcpdf_woocommerce_totals', 'wpo_wcpdf_woocommerce_totals_custom', 10, 2 );
function wpo_wcpdf_woocommerce_totals_custom( $totals, $order ) {
    $totals = array(
        'subtotal'  => array(
            'label' => __('Subtotal', 'wpo_wcpdf'),
            'value' => $order->get_subtotal_to_display(),
        ),
    );
    return $totals;
}

I tred to change $totals to $discount, but it didn't work.

Upvotes: 0

Views: 2210

Answers (1)

LoicTheAztec
LoicTheAztec

Reputation: 253959

Your actual code is just removing all totals, displaying the subtotal only. Please try the following hooked function, that will display the discounted subtotal after the discount amount:

add_filter( 'wpo_wcpdf_woocommerce_totals', 'add_discounted_subtotal_to_pdf_invoices', 10, 2 );
function add_discounted_subtotal_to_pdf_invoices( $totals, $order ) {
    // Get 'subtotal' raw amount value
    $subtotal = strip_tags($totals['cart_subtotal']['value']);
    $subtotal = (float) preg_replace('/[^0-9.]+/', '', $subtotal);

    // Get 'discount' raw amount value
    $discount = strip_tags($totals['discount']['value']);
    $discount = (float) preg_replace('/[^0-9.]+/', '', $discount);

    $new_totals = array();
    // Loop through totals lines
    foreach( $totals as $key => $values ){
        $new_totals[$key] = $totals[$key];
        // Inset new calculated 'Subtotal discounted' after total discount
        if( $key == 'discount' && $discount != 0 && !empty($discount) ){
            $new_totals['subtotal_discounted'] = array(
                'label' => __('Subtotal discounted', 'wpo_wcpdf'),
                'value' => wc_price($subtotal - $discount)
            );
        }
    }
    return $new_totals;
}

Code goes in function.php file of your active child theme (or theme).

Tested and works. It should work for you too.

Upvotes: 1

Related Questions