0
votes

Using Mystile theme in latest version of Woocommerce, i overrided variation.php in order to show discount price depending on quantity and variation chosen. I have 3 attributes : "marquage", "couleurs" and "couleurs à marquer".

Here's my php , added just after woocommerce_before_add_to_cart_form.

I hope your eyes won't bleed, i work on website since less than one year (i was a printer before \o/ did not know anything about coding).

> $available_variations = $product->get_available_variations();
> $variation_id=$available_variations[0]['variation_id']; 
> $variable_product1= new WC_Product_Variation( $variation_id );
> $regular_price1 = $variable_product1 ->regular_price;
> $sales_price1 = $variable_product1 ->sale_price;
> $variation_id=$available_variations[1]['variation_id']; 
> $variable_product2= new WC_Product_Variation( $variation_id );
> $regular_price2 = $variable_product2 ->regular_price;
> $sales_price2 = $variable_product2 ->sale_price;
> $variation_id=$available_variations[2]['variation_id']; 
> $variable_product3= new WC_Product_Variation( $variation_id );
> $regular_price3 = $variable_product3 ->regular_price;
> $sales_price3 = $variable_product3 ->sale_price;
> $variation_id=$available_variations[3]['variation_id']; 
> $variable_product4= new WC_Product_Variation( $variation_id );
> $regular_price4 = $variable_product4 ->regular_price;
> $sales_price4 = $variable_product4 ->sale_price;
> $variation_id=$available_variations[4]['variation_id']; 
> $variable_product5= new WC_Product_Variation( $variation_id );
> $regular_price5 = $variable_product5 ->regular_price;
> $sales_price5 = $variable_product5 ->sale_price;
> $variation_id=$available_variations[5]['variation_id']; 
> $variable_product6= new WC_Product_Variation( $variation_id );
> $regular_price6 = $variable_product6 ->regular_price;
> $sales_price6 = $variable_product6 ->sale_price;
> $variations_prices = array($available_variations[0][attributes][attribute_pa_couleurs] => $regular_price1, $available_variations[1][attributes][attribute_pa_couleurs] => $regular_price2, $available_variations[2][attributes][attribute_pa_couleurs] => $regular_price3, $available_variations[3][attributes][attribute_pa_couleurs] => $regular_price4, $available_variations[4][attributes][attribute_pa_couleurs] => $regular_price5, $available_variations[5][attributes][attribute_pa_couleurs] => $regular_price6);

Right, this works fine. These lines allow me to capture variations prices in variables, only for Couleurs attribute at this moment. I could add it to functions.php, but i want to get my json_encode($variations_prices); in jquery. So that's what I did in this script, juste after my custom php, still in variation.php.

Words SOME_BAD_PHP means opening or ending php, is_less_than means < (sorry for that, you're actually reading my first post in Stackoverflow :-) )

>     
>             $(document).ready(function(){ 
>     function calculate_price(){
>     var my_array = SOME_BAD_PHP echo json_encode($variations_prices); END_SOME_BAD_PHP;
>     var qty_prod = $('.qty').val();
>     var coul = $('#pa_couleurs').val();
>     var marquage = $('#pa_marquage').val(); 
>     var couleurs_marquage = $('#pa_couleurs-a-marquer').val();
>     if(jQuery.inArray($('select#pa_couleurs option:selected').val(), my_array)!== -1){ 
>     }else {
>     var price_in_array = my_array[$('select#pa_couleurs option:selected').val()];
>     var price_coul_min = price_in_array;}
>           if(qty_prod is_less_than 50) { 
>               var total_to_pay = price_coul_min * qty_prod;}
>           else if(qty_prod >= 50) { 
>               var price_redux = price_coul_min - 5 / 100;
>               var total_to_pay = price_redux * qty_prod;}
>     if (total_to_pay > 0){
>     $('#price_me').html('Le prix est de ' + total_to_pay + ' euros pour la sélection'); 
>     }else{}
>     };

And finally i added a simple <span id="price_me"></span> in my product page.

These lines of code show discount prices depending on variation and quantity chosen, in an span that have "price_me" id. Works fine, unfortunately that's not nice and it probably contains errors.

I hope my code (that works on local) will help others, i just want to do it properly :-D But there's no loop, and some bad php in jquery...

Is there a way to have a php function that returns my json_encode($array) to another function, that adds my jquery script to woocommerce (using wp_enqueue_script for example) ? (As usual, it was clear in my mind :-D)

1
Problem solved by adding js script to theme. Overriding cart with php function can be seen at cyrilchalamon.fr/woocommerce-loverride-du-panierCyssoo

1 Answers

1
votes

I included JS script that overrides Ajax prices, then i created a custom function that overrides woocommerce cart. Woocommerce cart override code can be seen at my own website, js file depends on what u're selling. Both work a charm, thanks to friends.