Показать общий вес каждого товара в корзине и оформить заказ в woocommerce - PullRequest
1 голос
/ 24 марта 2020

Я прочитал и попробовал по этой ссылке:

Отображение веса каждой корзины в WooCommerce

Не работает. Мне нужно иметь общий вес каждого товара в корзине и на кассе; например, вес статьи составляет 500 г, и если я добавлю в корзину 3 его статьи, она должна показать 1500 г.

Я настроил вес для некоторых продуктов на 0,2 кг (потому что система WordPress настроен в килограммах), но если я попробую этот код в предыдущей ссылке под названием продукта, он покажет мне " вес 0 ".

Я использовал этот код:

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;
}

Затем я попробовал другой код, чтобы получить общий вес корзины, и он отлично работает, для каждого изменения в корзине вес является правильным. Код, который я использовал:

    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' );

Мне нужен абсолютно общий вес для каждой строки товара (не вес только для одного товара): результат должен быть получен из item_weight * item_quantity (0.2 x 6 = 1.2)


Можно ли разместить эту информацию также на одной странице товара? когда пользователь изменяет значение количества, добавляемого в корзину, система должна также отображать общий вес, например: вес продукта составляет 0,2 кг, если пользователь изменяет значение с 1 на 2, показанный вес должен составлять 0,4, если значение равно 3, поэтому общий вес должен быть 0,6, а затем пользователь нажимает на кнопку «Добавить в корзину».

Я использую c этот код ниже, чтобы изменить общую цену при изменении количества:

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

}

1 Ответ

0 голосов
/ 24 марта 2020

В вашем коде $product_qty не определено

function displaying_cart_items_weight( $item_data, $cart_item ) {
    $product_qty = $cart_item['quantity'];

    $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' );

Чтобы настроить вес в зависимости от количества, на странице одного продукта вы можете использовать код ниже

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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...