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');
Przewijanie do góry