Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add custom checkout fields below the terms and conditions in Woocommerce

I have built an e-commerce site using Woocommerce. I would like to add two more check boxes below the terms and conditions. I have searched everywhere for a working solution and the only thing that I found is a commercial plugin.

How to add custom checkout fields (2 checkboxes) below the terms and conditions programmatically?

Location of the terms and condition screenshot:

The two checkboxes below the terms and conditions

like image 753
Max Loyd Avatar asked Feb 14 '18 09:02

Max Loyd


1 Answers

  • The 1st hooked function displays the 2 additional checkout fields
  • The 2nd hooked function will check that both checkboxes are "selected" to allow checkout, displaying a custom error notice if not…

The code:

add_action('woocommerce_checkout_before_terms_and_conditions', 'checkout_additional_checkboxes');
function checkout_additional_checkboxes( ){
    $checkbox1_text = __( "My first checkbox text", "woocommerce" );
    $checkbox2_text = __( "My Second checkbox text", "woocommerce" );
    ?>
    <p class="form-row custom-checkboxes">
        <label class="woocommerce-form__label checkbox custom-one">
            <input type="checkbox" class="woocommerce-form__input woocommerce-form__input-checkbox input-checkbox" name="custom_one" > <span><?php echo  $checkbox1_text; ?></span> <span class="required">*</span>
        </label>
        <label class="woocommerce-form__label checkbox custom-two">
            <input type="checkbox" class="woocommerce-form__input woocommerce-form__input-checkbox input-checkbox" name="custom_two" > <span><?php echo  $checkbox2_text; ?></span> <span class="required">*</span>
        </label>
    </p>
    <?php
}

add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
    // Check if set, if its not set add an error.
    if ( ! $_POST['custom_one'] )
        wc_add_notice( __( 'You must accept "My first checkbox".' ), 'error' );
    if ( ! $_POST['custom_two'] )
        wc_add_notice( __( 'You must accept "My second checkbox".' ), 'error' );
}

Code goes in function.php file of your active child theme (active theme).

Tested and works.

enter image description here

enter image description here

like image 83
LoicTheAztec Avatar answered Sep 24 '22 00:09

LoicTheAztec