Skip to content

Instantly share code, notes, and snippets.

@thegdshop
Created July 24, 2012 16:28
Show Gist options
  • Star 41 You must be signed in to star a gist
  • Fork 15 You must be signed in to fork a gist
  • Save thegdshop/3171026 to your computer and use it in GitHub Desktop.
Save thegdshop/3171026 to your computer and use it in GitHub Desktop.
WooCommerce - Add checkbox field to the checkout
<?php
/**
* Add checkbox field to the checkout
**/
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');
function my_custom_checkout_field( $checkout ) {
echo '<div id="my-new-field"><h3>'.__('My Checkbox: ').'</h3>';
woocommerce_form_field( 'my_checkbox', array(
'type' => 'checkbox',
'class' => array('input-checkbox'),
'label' => __('I have read and agreed.'),
'required' => true,
), $checkout->get_value( 'my_checkbox' ));
echo '</div>';
}
/**
* Process the checkout
**/
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
global $woocommerce;
// Check if set, if its not set add an error.
if (!$_POST['my_checkbox'])
$woocommerce->add_error( __('Please agree to my checkbox.') );
}
/**
* Update the order meta with field value
**/
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');
function my_custom_checkout_field_update_order_meta( $order_id ) {
if ($_POST['my_checkbox']) update_post_meta( $order_id, 'My Checkbox', esc_attr($_POST['my_checkbox']));
}
?>
@ZaheerAbbasAghani
Copy link

how can i add this checkbox after the payment methods ?

@zazikhan
Copy link

zazikhan commented May 18, 2017

Hi there i am getting error on this add_action('woocommerce_checkout_fields', 'my_custom_checkout_field');

function my_custom_checkout_field( $checkout ) {
woocommerce_form_field( 'my_field_name', array( 
        'type'          => 'text', 
        'class'         => array('my-field-class form-row-wide'), 
        'label'         => __('Fill in this field'), 
        'placeholder'   => __('Enter a number'),
        ), $checkout->get_value( 'my_field_name' )); 

Fatal error: Call to a member function get_value() on array in C:\xampp\htdocs\flower\wp-content\themes\Avada-child\functions.php on line 286

What's wrong i am doing ?

@Sea-Wing-designs
Copy link

Hello, I have tried this code snippit and found that if I leave a required field blank, I get an Internal Server Error. I am wondering what I can do to clear this up? Here is the code in my functions.php:

/** Add checkbox field to the checkout
**/
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');

function my_custom_checkout_field( $checkout ) {

echo '<div id="my-new-field"><h3>'.__('Mail List: ').'</h3>';

woocommerce_form_field( 'my_checkbox', array(
    'type'          => 'checkbox',
    'class'         => array('input-checkbox'),
    'label'         => __('Please add my email address to your mail list to keep me up to date on future offerings.'),
    'required'  => false,
    ), $checkout->get_value( 'my_checkbox' ));

echo '</div>';

}

/**

  • Process the checkout
    **/
    add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
global $woocommerce;

// Check if set, if its not set add an error.
if (!$_POST['my_checkbox'])
     $woocommerce->add_error( __('Would you like to join the mail list?') );

}

/**

  • Update the order meta with field value
    **/
    add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');

function my_custom_checkout_field_update_order_meta( $order_id ) {
if ($_POST['my_checkbox']) update_post_meta( $order_id, 'My Checkbox', esc_attr($_POST['my_checkbox']));
}

@MatLeduc
Copy link

MatLeduc commented Jul 20, 2017

Hi,

I get this Warning above the Place Order button just for a few seconds when the Checkout page is loading and then the warning disappear.

2017-07-20_direct-signature-warning

What can I do to fix this issue?

Thank you for your help!

@d3vit
Copy link

d3vit commented May 21, 2018

For those of you getting the error with get_value on an array -- use WC_Checkout::get_value instead

@hmbashar
Copy link

Working fine for checkbox, Thanks for the resource.

@naiaramooy
Copy link

Hello,

works perfectly, thank you very much!

However, could you help me adapt this code to put the checkout in two more languages? I am using WPML.

Thanks again.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment