Skip to content

Instantly share code, notes, and snippets.

@felipe-pita
Last active July 30, 2019 01:32
Show Gist options
  • Save felipe-pita/f4f0452d5a766543c0a7de834e612ad0 to your computer and use it in GitHub Desktop.
Save felipe-pita/f4f0452d5a766543c0a7de834e612ad0 to your computer and use it in GitHub Desktop.
<?php
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 20, 1);
function add_custom_price( $cart_obj ) {
// Necessário para WC 3.0+
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Evita repetição de hook
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// Categoria para ter o desconto
$discount_category_id = 19;
// Quantidade necessária para entrar na regra
$discount_rule_quantity = 3;
// Valor do produto
$discount_rule_price = 50;
// Counter
$products_with_category_counter = 0;
// Loop pelos produtos
foreach ( $cart_obj->get_cart() as $cart_item ) {
$product_categories = $cart_item['data']->get_category_ids();
// Se tiver a categoria da regra marca mais 1 no counter
if (in_array($discount_category_id, $product_categories)) {
// Adiciona o counter conforme a quantidade
$product_categories_quantity = $cart_item['quantity'];
$products_with_category_counter = $products_with_category_counter + $product_categories_quantity;
}
}
// Loop pelos produtos
foreach ( $cart_obj->get_cart() as $cart_item ) {
// Se tiver o número suficiente de produtos na regra
if ($products_with_category_counter >= $discount_rule_quantity) {
$product_categories = $cart_item['data']->get_category_ids();
// Muda o preço do produto caso seja da categoria desejada
if (in_array($discount_category_id, $product_categories)) {
$cart_item['data']->set_price($discount_rule_price);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment