Summary:
Here we have to add a custom checkbox from WooCommerce checkout based on a product ID
Solution:
// Conditional function: Checks if one of the products is in cart function is_in_cart( $products_ids ) { foreach( WC()->cart->get_cart() as $item ) { if ( in_array($item['product_id'], $products_ids) ) return true; // Exit } return false; } add_action('woocommerce_after_checkout_billing_form', 'checkout_shipping_form_packing_addition', 20); function checkout_shipping_form_packing_addition() { // Defined products that hide the checkout field if ( is_in_cart( array(15163) ) ) return; echo '<tr class="packing-select"><th>' . __('სამაჯური', 'woocommerce') . '</th><td>'; // Add a custom checkbox field woocommerce_form_field('chosen_packing', array( 'type' => 'checkbox', 'class' => array('form-row-wide packing'), 'label' => __('სამაჯურის ღირებულება 30₾', 'woocommerce'), 'description' => __('აღნიშნული სერვისით სარგებლობისთვის საჭიროა სამაჯურის შეძენა, თუ გსურთ შეძენა, მონიშნეთ ეს ველი, თუ უკვე გაქვთ სამაჯური ან ადგილზე გადაიხდით სამაჯურის ღირებულებას დატოვეთ მონიშვნის გარეშე', 'woocommerce'), 'required' => false, ), WC()->session->get('chosen_packing') ); echo '</td></tr>'; } |
Explanation:
The is_in_cart() function checks if any of the specified product IDs are present in the WooCommerce cart. If found, it returns true; otherwise, it returns false.
The checkout_shipping_form_packing_addition() function is hooked to the woocommerce_after_checkout_billing_form action with a priority of 20. This means it will be executed after the billing form is rendered.
Inside checkout_shipping_form_packing_addition(), it first checks if a specific product ID (15163) is present in the cart using is_in_cart(). If the product is present, it exits the function, preventing further execution.
If the product is not in the cart, it proceeds to echo HTML to display a custom checkbox field labeled "სამაჯური" (translation: Packing) with a description and a price.
The checkbox field allows users to select whether they want to purchase a packing service for an additional fee.
The value of the checkbox field is retrieved from the WooCommerce session using WC()->session->get('chosen_packing'), which allows the checkbox to retain its state if the user navigates away from the page and returns.
Overall, this code dynamically adds a checkbox field to the WooCommerce checkout page based on the presence of a specific product in the cart, providing users with the option to purchase an additional service.
Answered by: >LoicTheAztec
Credit:> StackOverflow
Suggested blogs:
>How to manage the Text in the container in Django?
>Activating Virtual environment in visual studio code windows 11
>Fix webapp stops working issue in Django- Python webapp
>Creating a form in Django to upload a picture from website
>Sending Audio file from Django to Vue
>How to keep all query parameters intact when changing page in Django?
>Solved: TaskList View in Django