简体   繁体   中英

Display the total weight of each item at cart and checkout page in WooCommerce

I read and tried the one at this link:

Display the weight of each cart items in WooCommerce

It does not work. I need to have the total weight of each item at cart and checkout; for example the weight of an article is 500 gr and if I add to the cart 3 of his article, it should show 1500 gr.

I have configured the weight for some products at 0.2 kg (becouse the wordpress system is configured in Kg) but if I try that code in the previous link, under the name of the product , it shows me " weight 0 ".

I have used this code:

add_filter( 'woocommerce_get_item_data', 'displaying_cart_items_weight', 10, 2 );
function displaying_cart_items_weight( $item_data, $cart_item ) {
    $item_weight = $cart_item['data']->get_weight() * $product_qty;
    $item_data[] = array(
        'key'       => __('Weight', 'woocommerce'),
        'value'     => $item_weight,
        'display'   => $item_weight . ' ' . get_option('woocommerce_weight_unit')
    );
    return $item_data;
}

Then I tried another code to have the total cart weight and it works perfectly , for each change I make in the cart, the weight is correct. The code I used is:

    if ( WC()->cart->needs_shipping() ) : ?>
        <tr class="shipping">
            <th><?php _e( 'Peso', 'woocommerce-cart-weight' ); ?></th>
            <td><span class="label"><?php echo $woocommerce->cart->cart_contents_weight . ' ' . get_option( 'woocommerce_weight_unit' ); ?></span></td>
        </tr>
    <?php endif;
}
add_action( 'woocommerce_cart_totals_after_order_total', 'wcw_cart' );
add_action( 'woocommerce_review_order_after_order_total', 'wcw_cart' );

I need absolutely the total weight for each item line (not the weight for a single product only) : the result should be given from item_weight * item_quantity (0.2 x 6 = 1.2)


Is it possible to have this information also in single product page? when a user change the value of the quantity to add to cart, the system should show also the total weight, example: a product weight is 0.2 kg if the user change the value from 1 to 2 , the weight showed should be 0.4 , if the value is 3 so the total weight should be 0.6 and then the user click on add to cart.

I am usic this code below to change price total on quantity change:

add_action( 'woocommerce_single_product_summary',
 'woocommerce_total_product_price', 31 );
function woocommerce_total_product_price() {
global $woocommerce, $product;
// let's setup our divs
echo sprintf('<div id="product_total_price" style="margin-bottom:20px;">%s
 %s</div>',__('Totale Prodotto:','woocommerce'),'<span 
class="price">'.$product->get_price().'</span>');
?>
    <script>
        jQuery(function($){
            var price = <?php echo $product->get_price(); ?>,
                currency = '<?php echo get_woocommerce_currency_symbol(); 
?>';

            $('[name=quantity]').change(function(){
                if (!(this.value < 1)) {

                    var product_total = parseFloat(price * this.value);

                    $('#product_total_price .price').html( currency + 
product_total.toFixed(2));

                }
            });
        });
    </script>
<?php

}

In your code $product_qty is undefined

So to display the total weight of each item at cart and checkout page in WooCommerce you can use:

function displaying_cart_items_weight( $item_data, $cart_item ) {
    // Product quantity
    $product_qty = $cart_item['quantity'];
    
    // Calculate total item weight
    $item_weight = $cart_item['data']->get_weight() * $product_qty;
    
    $item_data[] = array(
        'key'       => __('Weight', 'woocommerce'),
        'value'     => $item_weight,
        'display'   => $item_weight . ' ' . get_option('woocommerce_weight_unit')
    );
    
    return $item_data;
}
add_filter( 'woocommerce_get_item_data', 'displaying_cart_items_weight', 10, 2 );

function wcw_cart() {
    global $woocommerce;
    if ( WC()->cart->needs_shipping() ) : ?>
        <tr class="shipping">
            <th><?php _e( 'Peso', 'woocommerce-cart-weight' ); ?></th>
            <td><span class="label"><?php echo $woocommerce->cart->cart_contents_weight . ' ' . get_option( 'woocommerce_weight_unit' ); ?></span></td>
        </tr>
    <?php endif;
}
add_action( 'woocommerce_cart_totals_after_order_total', 'wcw_cart' );
add_action( 'woocommerce_review_order_after_order_total', 'wcw_cart' );

To adjust the weight and price based on the quantity, on the single product page, you can use:

function woocommerce_total_product_price() {
    global $woocommerce, $product;
    
    // let's setup our divs
    echo sprintf('<div id="product_total_price" style="margin-bottom:20px;">%s %s</div>', __('Totale Prodotto:','woocommerce'),'<span class="price">' . $product->get_price() . '</span>');
    echo sprintf('<div id="product_total_weight" style="margin-bottom:20px;">%s %s</div>', __('Totale Peso:','woocommerce'),'<span class="weight">' . $product->get_weight() . '</span>');
    
    ?>
        <script>
            jQuery(function($) {
                var price = <?php echo $product->get_price(); ?>, 
                    currency = '<?php echo get_woocommerce_currency_symbol(); ?>';
                    
                var weight = <?php echo $product->get_weight(); ?>;

                $('[name=quantity]').change(function() {
                    if (!(this.value < 1)) {
                        var product_total = parseFloat(price * this.value);

                        $('#product_total_price .price').html( currency + product_total.toFixed(2) );
                        
                        var weight_total = parseFloat(weight * this.value);
                        
                        $('#product_total_weight .weight').html( weight_total.toFixed(2) + ' kg');                      
                    }
                });
            });
        </script>
    <?php

}
add_action( 'woocommerce_single_product_summary', 'woocommerce_total_product_price', 31 );

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM