Изменить количество товаров в корзине для определенных товаров в woocommerce
Могу ли я изменить количество WooCommerce в каком-то конкретном продукте?
Я пытался:
global $woocommerce;
$items = $woocommerce->cart->get_cart();
foreach($items as $item => $values) {
$_product = $values['data']->post;
echo "<b>".$_product->post_title.'</b> <br> Quantity: '.$values['quantity'].'<br>';
$price = get_post_meta($values['product_id'] , '_price', true);
echo " Price: ".$price."<br>";
}
Как получить идентификатор продукта в корзину?
2 ответа
Чтобы изменить количество, см. После этого кода. Вот ваш повторный код:
foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$product = $cart_item['data']; // Get an instance of the WC_Product object
echo "<b>".$product->get_title().'</b> <br> Quantity: '.$cart_item['quantity'].'<br>';
echo " Price: ".$product->get_price()."<br>";
}
Обновлено: теперь, чтобы изменить количество для определенных продуктов, вам нужно будет использовать эту пользовательскую функцию, подключенную woocommerce_before_calculate_totals
Хук действия:
add_action('woocommerce_before_calculate_totals', 'change_cart_item_quantities', 20, 1 );
function change_cart_item_quantities ( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// HERE below define your specific products IDs
$specific_ids = array(37, 51);
$new_qty = 1; // New quantity
// Checking cart items
foreach( $cart->get_cart() as $cart_item_key => $cart_item ) {
$product_id = $cart_item['data']->get_id();
// Check for specific product IDs and change quantity
if( in_array( $product_id, $specific_ids ) && $cart_item['quantity'] != $new_qty ){
$cart->set_quantity( $cart_item_key, $new_qty ); // Change quantity
}
}
}
Код помещается в файл function.php активной дочерней темы (или активной темы).
Проверено и работает
Мне нужно отображать вес брутто и вес нетто продуктов и изменять вес брутто и вес нетто в зависимости от количества. При изменении количества также должны измениться вес нетто и вес брутто. Он отлично работал на странице одного продукта, в то время как переход к сгруппированным продуктам не мог этого достичь.
Вот мой единственный продукт, который работает нормально: https://hamarafresh.com/product/salmon/
Вот мои сгруппированные продукты не работают: https://hamarafresh.com/product/lady-fish/
Я получаю вес брутто и вес нетто из настраиваемого поля.
add_action( 'woocommerce_after_quantity_input_field', 'woocommerce_total_product_price', 31 );
function woocommerce_total_product_price() {
if ( is_product() ) {
global $woocommerce, $product;
$gross_weight = get_post_custom_values($key = 'gross_weight');
$net_weight = get_post_custom_values($key = 'net_weight');
get_post_meta( $post_id, $key, $single );
// let's setup our divs
?>
<?php $netweight5= esc_html( get_post_meta( get_the_ID(), 'net_weight', true ) ); ?>
<?php $grossweight5= esc_html( get_post_meta( get_the_ID(), 'gross_weight', true ) ); ?>
<?php
echo sprintf('<div id="net_weight_disp" style="margin-bottom:10px; margin-top:7px;">%s %s</div>',__('Net Weight:'),'<span class="price">'.$netweight5.'</span>');
echo sprintf('<div id="gross_weight_disp" style="margin-bottom:10px; margin-top:7px;">%s %s</div>',__('Gross Weight:'),'<span class="price">'.$grossweight5.'</span>');
echo sprintf('<div id="product_total_price" style="margin-bottom:20px; text-align: center;">%s %s</div>',__('Product Total:','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(); ?>';
<?php $net_weight = get_post_custom_values($key = 'net_weight'); ?>;
<?php $netweight5= esc_html( get_post_meta( get_the_ID(), 'net_weight', true ) ); ?>;
var net_weightt = <?php echo $netweight5; ?>;
<?php $gross_weight = get_post_custom_values($key = 'gross_weight'); ?>;
<?php $grossweight5= esc_html( get_post_meta( get_the_ID(), 'gross_weight', true ) ); ?>;
var gross_weightt = <?php echo $grossweight5 ?>;
$('[name=quantity]').change(function(){
if (!(this.value < 0.5)) {
var net_weighttt = (net_weightt* this.value);
var gross_weighttt = (gross_weightt* this.value);
var product_total = parseFloat(price * this.value);
$('#product_total_price .price').html( currency + product_total.toFixed(2));
$('#net_weight_disp .price').html( currency + net_weighttt.toFixed(2));
$('#gross_weight_disp .price').html( currency + gross_weighttt.toFixed(2));
}
});
});
</script>
<?php
}
}