我对我的 WooCommerce 结帐进行了一些调整(将折扣代码放置在其他位置的代码)。它可以工作,但是当添加此代码并且客户应用折扣代码时,它会删除客户已填写的所有信息,因此他们需要再次写下自己的姓名、地址、电子邮件和电话。
如何调整此代码以防止数据被删除,迫使客户输入两次?
/*
* Removing default "Coupon form" from the top of the checkout page
*/
remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10 );
/*
* Hooking "Coupon form" after order total in checkout page with custom function
*/
add_action( 'woocommerce_review_order_after_order_total', 'woocommerce_checkout_coupon_form_custom' );
/*
* Rendering html for "Coupon form" with custom function
*/
function woocommerce_checkout_coupon_form_custom() {
echo '<tr class="coupon-form"><td colspan="2">';
wc_get_template(
'checkout/form-coupon.php',
array(
'checkout' => WC()->checkout(),
)
);
echo '</td></tr>';
}
/* Åben rabatkode felt */
//Tilpas CSS
function mujuonly_add_inline_css() {
$mustlogin_custom_css = "
.woocommerce-form-coupon {
display:block !important;
}
";
//Styling i CSS visningen
wp_add_inline_style( 'woocommerce-inline', $mustlogin_custom_css ); //Variabel videregives til sheet
}
add_action( 'wp_enqueue_scripts', 'mujuonly_add_inline_css' ); //CSS style
你需要一些不同的东西:
我们没有删除原来的优惠券表单,而是用一些 CSS 隐藏它。
然后我们在订单总数后添加克隆的修改可见版本。
使用一些 JavaScript,我们将填写隐藏的优惠券字段并提交优惠券。
代码:
// Inline CSS on checkout page only
add_action('wp_head', 'custom_coupon_form_inline_css', 900);
function custom_coupon_form_inline_css() {
if ( is_checkout() && !is_wc_endpoint_url() ) {
echo '<style>.woocommerce-form-coupon-toggle{display:none;}
input[name="coupon_code2"]{width:200px;margin-right:24px;}</style>';
}
}
// Display cloned modified coupon field and button after order total in Checkout + JS
add_action('woocommerce_review_order_after_order_total', 'display_review_order_custom_coupon_field');
function display_review_order_custom_coupon_field() {
printf('<tr><th colspan="2"><div style="margin-bottom:6px;">' . __('Have a coupon?', 'woocommerce') . '</div>
<input type="text" name="coupon_code2" class="input-text" placeholder="Coupon code" id="coupon_code2" value="">
<button type="button" class="button" name="apply_coupon2" value="Apply coupon">Apply coupon</button>
</th></tr>');
wc_enqueue_js("$(document.body).on('input','input[name=coupon_code2]', function(){
$('input[name=coupon_code]').attr('value', $(this).val());
});
$(document.body).on('click','button[name=apply_coupon2]', function(){
$('button[name=apply_coupon]').trigger('click');
});");
}
代码位于子主题的functions.php 文件中(或插件中)。已测试并有效。