-
-
Save thegdshop/3171026 to your computer and use it in GitHub Desktop.
<?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'])); | |
} | |
?> |
This functionality does work to provide a checkbox that is required to proceed, but it doesn't show that value on the back-end.
I'm looking for something similar and stumped, my goal is, checkbox that says "Add me to your mailing list."
Yes/No, save on Administrative back end. Doesn't necessarily have to be required.
Has anyone been able to do something like this?
Thanks for the code. It´s working fine. How I can add 6 checkboxes among each other?
Yes, its a very useful Plug-In. Thank you :-)
Short Question: If the checkbox is not clicked, instead of "Please agree to.." it says
"Fatal error: Call to undefined method WooCommerce::add_error() " and the offended line is "$woocommerce->add_error( __('Please agree to my checkbox.') );" ..... Any Ideas?? Thanks for any Help :-)
Where in the function.php must I place this code. I only need a accepted checkbox for the terms of delivery etc 'I have read and agreed', very simple
Thanks for this! Just a little note: I had to change $woocommerce->add_error()
to wc_add_notice('my error message', 'error' );
to make it work with WooCommerce 2.3.*
eduardo-marcolino fix for WC 2.3 and above work like a charm. Thanks man!
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );
function my_custom_checkout_field( $checkout ) {
global $woocommerce;
$contents = WC()->cart->cart_contents;
$productid = array();
if( $contents ) foreach ( $contents as $cart_item ){
$productid[] = $cart_item['product_id'];
}
echo "
woocommerce_form_field( 'digest_subscribe', array(
'type' => 'checkbox',
'class' => array('my-field-class form-row-wide'),
'label' => __('Please send me the Online Yoga Weekly newsletter with news links, yoga pose, and inspiration for my practice.'),
'default' => 1
), $checkout->get_value( 'digest_subscribe' ));
if(in_array('6614',$productid)){
echo "
Please update me about latest video in YogaLifeTV.
"; woocommerce_form_field( 'news_yltvmail', array( 'type' => 'checkbox', 'class' => array('input-checkbox'), 'label' => __('By Mail'), 'required' => true, 'default' => 1 ), $checkout->get_value( 'news_yltvmail' )); echo " | "; woocommerce_form_field( 'news_yltvsms', array( 'type' => 'checkbox', 'class' => array('input-checkbox'), 'label' => __('By SMS'), 'readonly' => 'readonly', 'default' => 0 ) ,$checkout->get_value( 'news_yltvsms' )); echo " |
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
global $woocommerce;
if (!$_POST['news_yltvsms'])
$woocommerce->add_error( __('Please agree to my checkbox.') );
}
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['news_yltvsms']) update_post_meta( $order_id, 'By SMS', esc_attr($_POST['news_yltvsms']));
}
we are
i have to add 2 check box in checkout page..code is function.php...so i want all customer check box by mail ya by sms ..and proceed make payment...my all update show my admin like check box field add by mail ya by sms...so please help me
Can anyone help with this? I am trying to add a check box or radio button at checkout for the parent to choose which child they are registering for. The children information has been added to the parents profile using custom fields. Is there anyway for woocommerce to auto pull each child name so the parent can choose which child they are signing up and also have this displayed in the email thats sent out? Some parents may only have one kid some may have 4.
Thanks!
Can anyone help me on this?
I want to add a Send me invoice functionality to checkout page in such a way that if a user select Send Me Invoice and then he select a payment method Paypal the send me invoice checkbox keep selected and works
Hi there,
I am having problem with this code. If I copy it in full it breaks my site. If I edit it to remove the error message piece of the code, it works on the front end, but I do not receive notification in the order notes.
Thanks if you can help!
also for me throwing:
SyntaxError: Unexpected token < in JSON at position 0
if it's not clicked. instead of "Please agree to my checkbox."
I can not find any other tutorial how to solve this task manually (without installing
an extra plugin)
I was getting an internal server error with the code above after my latest update. Fixed by changing $woocommerce->add_error to wc_add_notice (see comment by eduardo-marcolino above).
Hi,
i try change location checkbox to woocommerce_checkout_after_terms_and_conditions.
When i change:
* Add checkbox field to the checkout **/ add_action('**woocommerce_checkout_after_terms_and_conditions**', 'my_custom_checkout_field');
i have error:
Fatal error: Call to a member function get_value() on string in
in line:
), $checkout->get_value( 'my_checkbox' ));
What is wrong?
@GamerDamian
woocommerce_checkout_after_terms_and_conditions
does not pass in the $checkout
variable, so you cant call a function on nil
see woocommerce hooks
If the checkbox isn't checked and throws an error, the form won't submit after it has been checked and the place order button is clicked again. It keeps throwing the error message. Any ideas?
How to add some amount in cart total if the checkbox is checked?
how can i add this checkbox after the payment methods ?
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 ?
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']));
}
For those of you getting the error with get_value on an array -- use WC_Checkout::get_value instead
Working fine for checkbox, Thanks for the resource.
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.
This is great but I would love to know what code I would include to make this check box appear when only certain categories of products are in the checkout.