如何解决根据 WooCommerce 结帐中的复选框添加或删除固定费用
使用 Add a dynamic fee based on a select field in WooCommerce Checkout 答案代码,我设法为复选框更改添加了新费用:
add_action('woocommerce_after_checkout_billing_form','checkout_shipping_form_packing_addition',20);
function checkout_shipping_form_packing_addition()
{
$domain = 'woocommerce';
echo '<tr class="packing-select"><th>' . __('EMBRULHO?',$domain) . '</th><td>';
$chosen = WC()->session->get('chosen_packing');
// Add a custom checkbox field
woocommerce_form_field('chosen_packing',array(
'type' => 'checkbox','class' => array('form-row-wide packing'),'label' => __('$5','woocommerce'),'required' => false,),$chosen);
echo '</td></tr>';
}
// jQuery - Ajax script
add_action('wp_footer','checkout_shipping_packing_script');
function checkout_shipping_packing_script()
{
// Only checkout page
if (is_checkout() && !is_wc_endpoint_url()) :
WC()->session->__unset('chosen_packing');
?>
<script type="text/javascript">
jQuery(function($) {
$('form.checkout').on('change','input#chosen_packing',function() {
var p = $(this).prop('checked');
console.log(p);
$.ajax({
type: 'POST',url: wc_checkout_params.ajax_url,data: {
'action': 'woo_get_ajax_data','packing': p,},success: function(result) {
$('body').trigger('update_checkout');
console.log('response: ' + result); // just for testing | TO BE REMOVED
},error: function(error) {
console.log(error); // just for testing | TO BE REMOVED
}
});
});
});
</script>
<?php
endif;
}
// Php Ajax (Receiving request and saving to WC session)
add_action('wp_ajax_woo_get_ajax_data','woo_get_ajax_data');
add_action('wp_ajax_nopriv_woo_get_ajax_data','woo_get_ajax_data');
function woo_get_ajax_data()
{
if (isset($_POST['packing'])) {
$packing = sanitize_key($_POST['packing']);
WC()->session->set('chosen_packing',$packing);
echo json_encode($packing);
}
die(); // Alway at the end (to avoid server error 500)
}
// Add a custom dynamic packaging fee
add_action('woocommerce_cart_calculate_fees','add_packaging_fee',20,1);
function add_packaging_fee($cart)
{
if (is_admin() && !defined('DOING_AJAX'))
return;
$domain = "woocommerce";
if(WC()->session->get('chosen_packing')){
$label = __('Embrulho',$domain);
$cost = 5;
}
if (isset($cost))
$cart->add_fee($label,$cost);
}
未选中时如何取消费用?
这是一个礼品包装选项,如果选择,将在结帐时将额外费用添加到总数中。如果未选中,则应删除费用并更新结帐。
解决方法
您只需对代码进行一些小的更改,例如:
example.com
代码位于活动子主题(或活动主题)的functions.php 文件中。经测试有效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。