Customizing a checkbox
-
Hello everyone!
I added an optional checkbox to my site by adding a bit of code to functions.php. It’s great and all, however I want it to look just like the delivery checkbox. Instead of clicking on the checkbox to reveal the price, I want there to be “Assembly” under the delivery fee, and on the right side I want the default option to be No assembly and the option under to be Assembly – 170€ (for each product). I made a few screenshots AND I Photoshopped exactly what I need.
THIS is what it looks like when it’s not checked (Monta?a)
THIS is what it looks like when it’s checked – I just want to disable the first checkbox, so it looks the way it it when it’s checked.I hope since you have the checkbox for delivery by default on WooCommerce, that adding the same checkbox, just with different options will be easy to solve.
The code I added to functions.php:
// Display the custom checkbow field in checkout add_action( 'woocommerce_review_order_before_order_total', 'fee_installment_checkbox_field', 20 ); function fee_installment_checkbox_field(){ echo '<tr class="packing-select"><th>'; woocommerce_form_field( 'installment_fee', array( 'type' => 'checkbox', 'class' => array('installment-fee form-row-wide'), 'label' => __('Monta?a v 14 dneh'), 'placeholder' => __(''), ), WC()->session->get('installment_fee') ? '1' : '' ); echo '</th><td>'; } // jQuery - Ajax script add_action( 'wp_footer', 'checkout_fee_script' ); function checkout_fee_script() { // Only on Checkout if( is_checkout() && ! is_wc_endpoint_url() ) : if( WC()->session->__isset('installment_fee') ) WC()->session->__unset('installment_fee') ?> <script type="text/javascript"> jQuery( function($){ if (typeof wc_checkout_params === 'undefined') return false; $('form.checkout').on('change', 'input[name=installment_fee]', function(){ var fee = $(this).prop('checked') === true ? '1' : ''; $.ajax({ type: 'POST', url: wc_checkout_params.ajax_url, data: { 'action': 'installment_fee', 'installment_fee': fee, }, success: function (result) { $('body').trigger('update_checkout'); }, }); }); }); </script> <?php endif; } // Get Ajax request and saving to WC session add_action( 'wp_ajax_installment_fee', 'get_installment_fee' ); add_action( 'wp_ajax_nopriv_installment_fee', 'get_installment_fee' ); function get_installment_fee() { if ( isset($_POST['installment_fee']) ) { WC()->session->set('installment_fee', ($_POST['installment_fee'] ? true : false) ); } die(); } // Add a custom calculated fee conditionally add_action( 'woocommerce_cart_calculate_fees', 'set_installment_fee' ); function set_installment_fee( $cart ){ if ( is_admin() && ! defined('DOING_AJAX') || ! is_checkout() ) return; if ( did_action('woocommerce_cart_calculate_fees') >= 2 ) return; if ( 1 == WC()->session->get('installment_fee') ) { $items_count = WC()->cart->get_cart_contents_count(); $fee_label = sprintf( __( "Monta?a" ), '×', $items_count ); $fee_amount = 170 * $items_count; WC()->cart->add_fee( $fee_label, $fee_amount ); } } add_filter( 'woocommerce_form_field' , 'remove_optional_txt_from_installment_checkbox', 10, 4 ); function remove_optional_txt_from_installment_checkbox( $field, $key, $args, $value ) { // Only on checkout page for Order notes field if( 'installment_fee' === $key && is_checkout() ) { $optional = ' <span class="optional">(' . esc_html__( 'optional', 'woocommerce' ) . ')</span>'; $field = str_replace( $optional, '', $field ); } return $field; }
Kind regards
The page I need help with: [log in to see the link]
- The topic ‘Customizing a checkbox’ is closed to new replies.