mercredi 2 octobre 2019

How to add custom price when checkbox click in checkout page (woocommerce)

I have coding which is working well, this code working when user click on the checkbox then shipping price remove. Which is working well, I just want to add custom price on checkbox click then add their price also. Thanks

Here is the code please check.

                    // Add a Custom checkbox field for shipping options (just for testing)
                    add_action( 'woocommerce_after_checkout_billing_form', 'custom_billing_checkbox_for_testing', 10, 1 );
                    function custom_billing_checkbox_for_testing( $checkout ) {
                        $field_id = 'billing_ups_yn';

                        // Get the checked state if exist
                        $billing_ups = WC()->session->get('billing_ups' );
                        if(empty($billing_ups))
                            $billing_ups = $checkout->get_value( $field_id );

                        // Add the custom checkout field (checkbox)
                        woocommerce_form_field( $field_id, array(
                            'type' => 'checkbox',
                            'class' => array( 'form-row-wide' ),
                            'label' => __('Billing UPS'),
                        ), $billing_ups );
                    }

                    // function that gets the Ajax data
                    add_action( 'wp_ajax_woo_get_ajax_data', 'woo_get_ajax_data' );
                    add_action( 'wp_ajax_nopriv_woo_get_ajax_data', 'woo_get_ajax_data' );
                    function woo_get_ajax_data() {
                        if ( $_POST['billing_ups'] == '1' ){
                            WC()->session->set('billing_ups', '1' );
                        } else {
                            WC()->session->set('billing_ups', '0' );
                        }
                        echo json_encode( WC()->session->get('billing_ups' ) );
                        die(); // Alway at the end (to avoid server error 500)
                    }

                    // Conditionally changing the shipping methods costs
                    add_filter( 'woocommerce_package_rates','conditional_custom_shipping_cost', 90, 2 );
                    function conditional_custom_shipping_cost( $rates, $package ) {

                        if ( WC()->session->get('billing_ups' ) == '1' ){
                            foreach ( $rates as $rate_key => $rate_values ) {
                                // Not for "Free Shipping method" (all others only)
                                if ( 'free_shipping' !== $rate_values->method_id ) {

                                    // Set the rate cost
                                    $rates[$rate_key]->cost = 0;

                                    // Set taxes rate cost (if enabled)
                                    $taxes = array();
                                    foreach ($rates[$rate_key]->taxes as $key => $tax)
                                        if( $rates[$rate_key]->taxes[$key] > 0 ) // set the new tax cost
                                            $taxes[$key] = 0;
                                    $rates[$rate_key]->taxes = $taxes;
                                }
                            }
                        }
                        return $rates;
                    }

                    // Enabling, disabling and refreshing session shipping methods data
                    add_action( 'woocommerce_checkout_update_order_review', 'refresh_shipping_methods', 10, 1 );
                    function refresh_shipping_methods( $post_data ){
                        $bool = true;
                        if ( WC()->session->get('billing_ups' ) == '1' ) $bool = false;

                        // Mandatory to make it work with shipping methods
                        foreach ( WC()->cart->get_shipping_packages() as $package_key => $package ){
                            WC()->session->set( 'shipping_for_package_' . $package_key, $bool );
                        }
                        WC()->cart->calculate_shipping();
                        }


                        // The Jquery script
                        add_action( 'wp_footer', 'custom_checkout_script' );
                        function custom_checkout_script() {
                            ?>
                            <script type="text/javascript">
                                jQuery( function($){

                                    // update cart on delivery location checkbox option
                                    $('#billing_ups_yn_field input').change( function () {
                                        var checked = 0;
                                        if ( $('#billing_ups_yn').is(':checked') )
                                            checked = 1;

                                        $.ajax({
                                            type: 'POST',
                                            url: wc_checkout_params.ajax_url,
                                            data: {
                                                'action': 'woo_get_ajax_data',
                                                'billing_ups': checked,
                                            },
                                            success: function (result) {
                                                $('body').trigger('update_checkout');
                                                console.log('response: '+result); // just for testing
                                            },
                                            error: function(error){
                                                console.log(error); // just for testing
                                            }
                                        });
                                    });
                                });
                            </script>
                            <?php
                        }       

Hope you understand and give me solution to make this workable with click add price also. Thanks

All this code get from this :- Remove shipping cost if custom checkbox is checked in WooCommerce Checkout




Aucun commentaire:

Enregistrer un commentaire