如果 WooCommerce 中有已应用的优惠券,请自定义结帐字段
Customize a checkout field if there are applied coupons in WooCommerce
如果在 Woocommerce 中应用了优惠券,需要控制订单备注结帐字段:我试过这个不会成功。
add_action('woocommerce_applied_coupon', 'apply_product_on_coupon');
function apply_product_on_coupon( ) {
if (WC()->cart->has_discount('test')) {
$fields['billing']['billing_customer_note']['placeholder'] = 'You can have up to three initials';
$fields['billing']['billing_customer_note']['label'] = 'Personalise your Tote bag';
$fields['billing']['billing_customer_note']['required'] = true;
$fields['billing']['billing_customer_note']['input_class'] = array('tote-bag');
}
return $fields;
}
我知道 $fields 位有效,因为我在不同的场景中使用过它。如果我们假设优惠券代码是 'test' 我需要订单备注是强制性的,更改标签和占位符并应用一些额外的 CSS 类。
有什么建议吗?
请尝试使用此代码。在您的活动主题 functions.php 文件中添加此代码。
summer 是优惠券代号。替换为您的优惠券代码名称
add_filter('woocommerce_checkout_fields', 'xa_remove_billing_checkout_field');
function xa_remove_billing_checkout_field($fields) {
global $woocommerce;
if (!empty(WC()->cart->applied_coupons)){
if (in_array("summer", WC()->cart->applied_coupons)) {
$fields['order']['order_comments']['required'] = true;
$fields['order']['order_comments']['placeholder'] ='custom placeholder';
$fields['order']['order_comments']['label'] = 'custom label';
$fields['order']['order_comments']['input_class'] = array('tote-bag');
}
}
return $fields;
}
希望对你有用。谢谢
更新
如果您从结帐中删除优惠券,请刷新页面。
function action_woocommerce_removed_coupon( $coupon_code ) {
if ($coupon_code == "summer") { ?>
<script>location.reload();</script>
<?php }
};
add_action( 'woocommerce_removed_coupon', 'action_woocommerce_removed_coupon', 10, 1 );
由于客户可以在结帐页面添加或删除优惠券,因此需要 jQuery 和 Php。
仅当优惠券代码应用于订单时,以下代码将使结帐订单备注字段成为必需字段,更改其标签和占位符,并将手提袋作为选择器 class 添加到文本区域输入字段。它将在需要该字段时处理验证。
请改用以下代码:
add_filter('woocommerce_before_checkout_form', 'custom_order_notes_checkout_fields_js');
function custom_order_notes_checkout_fields_js($fields) {
// Here below set your custom order notes attributes (when a coupon is applied)
$field_label = __('custom label');
$placeholder = __('custom placeholder');
$label = 'tote-bag';
$required = '<abbr class="required" title="required">*</abbr>';
wc_enqueue_js( "jQuery(function($){
var required = '".$required."',
label = '".$field_label."',
placeholder = '".$placeholder."',
input_class = '".$input_class."',
class_requ = 'validate-required',
class_valid = 'woocommerce-validated',
class_unval = 'woocommerce-invalid woocommerce-invalid-required-field',
notesPara = '#order_comments_field',
notesLabel = notesPara+' label',
notesText = notesPara+' textarea',
defaultLabel = $(notesText).html(),
defaultPHold = $(notesText).attr('placeholder'),
newLabel = label+' '+required;
console.log(defaultPHold);
if( $('tr.cart-discount').length > 0 ) {
$(notesPara).addClass(class_requ).addClass(class_valid);
$(notesLabel).html(newLabel);
$(notesText).attr('placeholder', placeholder);
}
// On order notes change
$(document.body).on('change input', notesText, function(){
if( $('tr.cart-discount').length > 0 ) {
if( $(this).val() != '' ) {
$(notesPara).removeClass(class_unval);
if ( ! $(notesPara).hasClass(class_valid) ) {
$(notesPara).addClass(class_valid);
}
} else {
$(notesPara).removeClass(class_valid);
if ( ! $(notesPara).hasClass(class_unval) ) {
$(notesPara).addClass(class_unval);
}
}
}
});
// On coupon change
$(document.body).on('updated_checkout', function(){
if( $('tr.cart-discount').length > 0 ) {
if( ! $(notesPara).hasClass(class_requ) ) {
$(notesPara).addClass(class_requ).addClass(class_valid);
$(notesLabel).html(newLabel);
$(notesText).addClass(input_class);
$(notesText).attr('placeholder', placeholder);
}
} else {
if( $(notesPara).hasClass(class_requ) ) {
$(notesPara).removeClass(class_requ).removeClass(class_valid).removeClass(class_unval);
$(notesLabel).html(defaultLabel);
$(notesText).addClass(input_class);
$(notesText).attr('placeholder', defaultPHold);
}
}
});
});");
}
// Enable "Order notes" field validation for applied coupons
add_filter('woocommerce_checkout_process', 'validation_checkout_required_order_comments');
function validation_checkout_required_order_comments() {
$applied_coupons = WC()->cart->get_applied_coupons();
if ( ! empty($applied_coupons) && isset($_POST['order_comments']) && strlen($_POST['order_comments']) < 3 ) {
wc_add_notice( __("Order comments is a required custom field whan a coupon is applied", "woocommerce"), 'error' );
}
}
代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
如果在 Woocommerce 中应用了优惠券,需要控制订单备注结帐字段:我试过这个不会成功。
add_action('woocommerce_applied_coupon', 'apply_product_on_coupon');
function apply_product_on_coupon( ) {
if (WC()->cart->has_discount('test')) {
$fields['billing']['billing_customer_note']['placeholder'] = 'You can have up to three initials';
$fields['billing']['billing_customer_note']['label'] = 'Personalise your Tote bag';
$fields['billing']['billing_customer_note']['required'] = true;
$fields['billing']['billing_customer_note']['input_class'] = array('tote-bag');
}
return $fields;
}
我知道 $fields 位有效,因为我在不同的场景中使用过它。如果我们假设优惠券代码是 'test' 我需要订单备注是强制性的,更改标签和占位符并应用一些额外的 CSS 类。
有什么建议吗?
请尝试使用此代码。在您的活动主题 functions.php 文件中添加此代码。
summer 是优惠券代号。替换为您的优惠券代码名称
add_filter('woocommerce_checkout_fields', 'xa_remove_billing_checkout_field');
function xa_remove_billing_checkout_field($fields) {
global $woocommerce;
if (!empty(WC()->cart->applied_coupons)){
if (in_array("summer", WC()->cart->applied_coupons)) {
$fields['order']['order_comments']['required'] = true;
$fields['order']['order_comments']['placeholder'] ='custom placeholder';
$fields['order']['order_comments']['label'] = 'custom label';
$fields['order']['order_comments']['input_class'] = array('tote-bag');
}
}
return $fields;
}
希望对你有用。谢谢
更新
如果您从结帐中删除优惠券,请刷新页面。
function action_woocommerce_removed_coupon( $coupon_code ) {
if ($coupon_code == "summer") { ?>
<script>location.reload();</script>
<?php }
};
add_action( 'woocommerce_removed_coupon', 'action_woocommerce_removed_coupon', 10, 1 );
由于客户可以在结帐页面添加或删除优惠券,因此需要 jQuery 和 Php。
仅当优惠券代码应用于订单时,以下代码将使结帐订单备注字段成为必需字段,更改其标签和占位符,并将手提袋作为选择器 class 添加到文本区域输入字段。它将在需要该字段时处理验证。
请改用以下代码:
add_filter('woocommerce_before_checkout_form', 'custom_order_notes_checkout_fields_js');
function custom_order_notes_checkout_fields_js($fields) {
// Here below set your custom order notes attributes (when a coupon is applied)
$field_label = __('custom label');
$placeholder = __('custom placeholder');
$label = 'tote-bag';
$required = '<abbr class="required" title="required">*</abbr>';
wc_enqueue_js( "jQuery(function($){
var required = '".$required."',
label = '".$field_label."',
placeholder = '".$placeholder."',
input_class = '".$input_class."',
class_requ = 'validate-required',
class_valid = 'woocommerce-validated',
class_unval = 'woocommerce-invalid woocommerce-invalid-required-field',
notesPara = '#order_comments_field',
notesLabel = notesPara+' label',
notesText = notesPara+' textarea',
defaultLabel = $(notesText).html(),
defaultPHold = $(notesText).attr('placeholder'),
newLabel = label+' '+required;
console.log(defaultPHold);
if( $('tr.cart-discount').length > 0 ) {
$(notesPara).addClass(class_requ).addClass(class_valid);
$(notesLabel).html(newLabel);
$(notesText).attr('placeholder', placeholder);
}
// On order notes change
$(document.body).on('change input', notesText, function(){
if( $('tr.cart-discount').length > 0 ) {
if( $(this).val() != '' ) {
$(notesPara).removeClass(class_unval);
if ( ! $(notesPara).hasClass(class_valid) ) {
$(notesPara).addClass(class_valid);
}
} else {
$(notesPara).removeClass(class_valid);
if ( ! $(notesPara).hasClass(class_unval) ) {
$(notesPara).addClass(class_unval);
}
}
}
});
// On coupon change
$(document.body).on('updated_checkout', function(){
if( $('tr.cart-discount').length > 0 ) {
if( ! $(notesPara).hasClass(class_requ) ) {
$(notesPara).addClass(class_requ).addClass(class_valid);
$(notesLabel).html(newLabel);
$(notesText).addClass(input_class);
$(notesText).attr('placeholder', placeholder);
}
} else {
if( $(notesPara).hasClass(class_requ) ) {
$(notesPara).removeClass(class_requ).removeClass(class_valid).removeClass(class_unval);
$(notesLabel).html(defaultLabel);
$(notesText).addClass(input_class);
$(notesText).attr('placeholder', defaultPHold);
}
}
});
});");
}
// Enable "Order notes" field validation for applied coupons
add_filter('woocommerce_checkout_process', 'validation_checkout_required_order_comments');
function validation_checkout_required_order_comments() {
$applied_coupons = WC()->cart->get_applied_coupons();
if ( ! empty($applied_coupons) && isset($_POST['order_comments']) && strlen($_POST['order_comments']) < 3 ) {
wc_add_notice( __("Order comments is a required custom field whan a coupon is applied", "woocommerce"), 'error' );
}
}
代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。