Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add a terms and conditions checkbox in Woocommerce registration form

In woocommerce registration form, there's no "terms and conditions" before sign up button.

Is there a way to make it appears in the form?

Here is the link of my theme layout.

like image 482
German Avatar asked Dec 04 '22 20:12

German


1 Answers

Updated on july 2018 - Added compatibility for Woocommerce version 3.4+

If not done yet, first you need enable terms and conditions on checkout page:

  1. To create a new page in Wordpress for your terms and conditions
  2. To enable that page in Woocommerce > Settings > Checkout > Checkout pages (section):
    enter image description here
  3. Then save… you are done.

The code to get the term and conditions check box on registration form:

// Add term and conditions check box on registration form
add_action( 'woocommerce_register_form', 'add_terms_and_conditions_to_registration', 20 );
function add_terms_and_conditions_to_registration() {

    if ( wc_get_page_id( 'terms' ) > 0 && is_account_page() ) {
        ?>
        <p class="form-row terms wc-terms-and-conditions">
            <label class="woocommerce-form__label woocommerce-form__label-for-checkbox checkbox">
                <input type="checkbox" class="woocommerce-form__input woocommerce-form__input-checkbox input-checkbox" name="terms" <?php checked( apply_filters( 'woocommerce_terms_is_checked_default', isset( $_POST['terms'] ) ), true ); ?> id="terms" /> <span><?php printf( __( 'I&rsquo;ve read and accept the <a href="%s" target="_blank" class="woocommerce-terms-and-conditions-link">terms &amp; conditions</a>', 'woocommerce' ), esc_url( wc_get_page_permalink( 'terms' ) ) ); ?></span> <span class="required">*</span>
            </label>
            <input type="hidden" name="terms-field" value="1" />
        </p>
    <?php
    }
}

// Validate required term and conditions check box
add_action( 'woocommerce_register_post', 'terms_and_conditions_validation', 20, 3 );
function terms_and_conditions_validation( $username, $email, $validation_errors ) {
    if ( ! isset( $_POST['terms'] ) )
        $validation_errors->add( 'terms_error', __( 'Terms and condition are not checked!', 'woocommerce' ) );

    return $validation_errors;
}

Code goes in function.php file of your active child theme (or active theme). Tested and works.

enter image description here

When checkbox is not ticked, an error message is displayed.

enter image description here

This checkbox is only a validation step (It is not saved in database, as we don't use that information anywhere).


Addition:

To allow terms and conditions only in Registration page use one of the following:

add_filter( 'woocommerce_checkout_show_terms', '__return_false' );

Or

add_filter( 'woocommerce_get_terms_and_conditions_checkbox_text', '__return_false' );

Code goes in function.php file of your active child theme (or active theme). Tested on WC 3.5+ and works.

like image 107
LoicTheAztec Avatar answered Dec 11 '22 17:12

LoicTheAztec