Reputation: 110
On Checkout page, I would like to show the comment field, only if a coupon code is applied. In this case this comment field should be a required field.
The example below works except for the required status to optional.
I made the comments required as a default and then I assumed that after unsetting them the required status would be ignored.
This is the snippet that makes the comments required:
$fields['order']['order_comments']['required'] = true;
This snippet looks for a coupon code and then shows a message. I dont need the message so I left that blank, and then I added the lines that hides the comments:
add_action( 'woocommerce_before_checkout_form' , 'product_checkout_custom_content' );
function product_checkout_custom_content() {
global $woocommerce;
$msgs = array('mycouponcode'=>'');
$applied_coupon = $woocommerce->cart->applied_coupons;
if( ! array_key_exists($applied_coupon[0], $msgs) ) {
// Hides the order comments
unset( $fields['order']['order_comments'] );
add_filter( 'woocommerce_enable_order_notes_field', '__return_false' );
// Here I need to make the order_comments optional, not required
// echo $msgs[$applied_coupon[0]];
}
}
How can I make the order comments optional within the same action?
Upvotes: 1
Views: 2566
Reputation: 254388
To make that work, you don't need
function product_checkout_custom_content()
. Instead you have to make some change in the function where is included$fields['order']['order_comments']['required'] = true;
.
I suppose that is a function hooked in woocommerce_checkout_fields
. So in that function you will have to replace $fields['order']['order_comments']['required'] = true;
, by the code inside the function:
// CHECKOUT PAGE - CUSTOMIZING comment field (conditional behavior).
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
function custom_override_checkout_fields( $fields ) {
//Set your coupon slug here:
$coupon = 'coupon_slug';
// Coupon is applied: Changing Comment field Label, placeholder and setting "REQUIRED"
if ( in_array( '$coupon, WC()->cart->applied_coupons ) ){
$fields['order']['order_comments']['label'] = __('Your comment label…', 'my_theme_slug');
$fields['order']['order_comments']['placeholder'] = __('Enter here something', 'my_theme_slug');
$fields['order']['order_comments']['required'] = true;
} else {
// Removes the comment field + block title
unset($fields['order']['order_comments']);
add_filter( 'woocommerce_enable_order_notes_field', '__return_false' );
}
return $fields;
}
You don't need anything else…
Code goes in function.php file of your active child theme (or theme) or also in any plugin file.
This code is tested and works.
Reference: Remove the Additional Information and Order Notes fields in WooCommerce
Upvotes: 3