Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
650 views
in Technique[技术] by (71.8m points)

php - 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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...