Wyliczenie ceny produktu za 1m2 dla danej kategorii produktów
Zagadnienie dotyczy produktów zarówno prostych jak i produktów z wariantami. Klient zażyczył sobie, aby dla danej kategorii produktów wyliczyć ceny za 1m2 i wyświetlić jako dodatkową informację na karcie produktu.
Produkty danej kategorii mają różne wymiary i sprzedawane są w paczkach tj. po kilkanaście sztuk w paczce. Pierwszym krokiem rozwiązania było postawienie warunku czy dany produkt należy do szukanej kategorii i czy ma podane wymiary. Następnie wykonywano określone operacje w zależności czy produkt jest prosty czy z wariantami.
W przypadku produktu prostego pobierana została długość i szerokość w mm oraz cena produktu wliczająca podatek (taka cena wyświetlana jest na karcie produktu). Produkty proste zawsze były pakowane po 16 sztuk. Dlatego wyliczenie ceny za 1m2 w tym wypadku było bardzo proste.
W przypadku produktów z wariantami dodatkowo trzeba było wziąć pod uwagę atrybut „format”, ponieważ dany format determinował ilość sztuk w paczce. Dla typu LF po 16 sztuk w paczce, dla typu NF – po 48 sztuk, a dla typu RF po 50 sztuk. Jako że atrybut „format” zapisywany był w formie typ+wymiary np.: LF-490x52x14 to należało wyciągnąć dwie pierwsze litery stringa i na tej podstawie wyznaczyć ilość sztuk w paczce.”
Cały kod poniżej:
function wyswietl_cene_za_metr_kwadratowy() {
global $product;
if( $product->has_dimensions() && has_term('king-size', 'product_cat', $product->ID) ) {
if ($product->is_type('simple')) {
$length = $product->get_length();
$width = $product->get_width();
$price_with_tax = $product->get_price_including_tax();
$price_qm = $price_with_tax / (16 * $length * 0.001 * $width * 0.001);
?><div class="cena-za-metr">
<span><?php echo 'Der Preis für 1 qm beträgt '; ?></span>
</span><?php echo woocommerce_price($price_qm); ?></span>
</div><?php
} else if ($product->is_type('variable')) {
$available_variations = $product->get_available_variations();
foreach( $available_variations as $variation => $value ){
$format = $value['attributes']['attribute_pa_format'];
$type = substr($format,0,2);
$amount;
if($type == 'lf') {
$amount = 16;
} else if ($type == 'rf') {
$amount = 50;
} else if ($type == 'nf') {
$amount = 48;
} else
return;
$length = $value['dimensions']['length'];
$width = $value['dimensions']['width'];
$price_with_tax = $value['display_price'];
$price_qm = $price_with_tax / ( $amount * $length * 0.001 * $width * 0.001);
?><div class="cena-za-metr">
<span><?php echo 'Der Preis für 1 qm ' . strtoupper($format) . ' beträgt '; ?></span>
</span><?php echo woocommerce_price($price_qm) . '<br>'; ?></span>
</div><?php
}
} else return;
}
}
add_action('woocommerce_before_add_to_cart_form', 'wyswietl_cene_za_metr_kwadratowy');