我试图在结账时向订单总额支付定制费用.
我在woocommerce中添加了一个复选框
我在woocommerce中添加了一个复选框
add_action( 'woocommerce_after_checkout_billing_form','add_Box_option_to_checkout' );
function add_Box_option_to_checkout( $checkout ) {
echo '<div id="message_fields">';
woocommerce_form_field( 'add_gift_Box',array(
'type' => 'checkBox','class' => array('add_gift_Box form-row-wide'),'label' => __('Ilość pudełek ozdobnych - 25 PLN/szt'),'placeholder' => __(''),),$checkout->get_value( 'add_gift_Box' ));
}
包含一个可以处理事件的自定义js文件
jQuery( document ).ready(function( $) {
$('#add_gift_Box').click(function(){
var data = {
action: 'woocommerce_add_gift_Box',state: '200',};
jQuery.ajax({
type: 'POST',url: wc_checkout_params.ajax_url,data: data,success: function (code) {
console.log(code);
jQuery('body').trigger('update_checkout');
},dataType: 'html'
});
});
});
还有一个PHP费用处理功能
function woo_add_cart_fee( $data ){
if ( is_admin() && ! defined( 'DOING_AJAX' ) || ! $_POST ) return;
$extracost = 0;
if (isset($_POST['state'])) {
$extracost = intval($_POST['state']);
}
WC()->cart->add_fee( 'Ozdobne pudełka:',$extracost );
}
add_action( 'woocommerce_cart_calculate_fees','woo_add_cart_fee' );
add_action('wp_ajax_woocommerce_add_gift_Box','woo_add_cart_fee',10);
add_action('wp_ajax_nopriv_woocommerce_add_gift_Box',10);
由于某些原因,$_POST [‘state’]的值没有添加,当我给出一个硬编码值时,该函数有效,我尝试了很多选项,但是无法使其工作.
我见过类似的帖子,但没有一个人有答案.
后期数据由’post_data’中的AJAX函数发送,序列化.因此,要获取复选框的值,您只需要parse_str()这个!
parse_str( $_POST['post_data'],$post_data );
然后你可以从$post_data [‘add_gift_Box’]获得’add_gift_Box’选项.请注意,订单完成后,此’post_data’元素不再可用,所有内容都在$_POST中.
完整示例,基于您的代码:
1)将复选框添加到结帐中
add_action( 'woocommerce_after_checkout_billing_form',$checkout->get_value( 'add_gift_Box' ));
echo '</div>';
}
2)单击复选框时更新购物车的脚本(无需额外的AJAX请求!)
add_action( 'wp_footer','woocommerce_add_gift_Box' );
function woocommerce_add_gift_Box() {
if (is_checkout()) {
?>
<script type="text/javascript">
jQuery( document ).ready(function( $) {
$('#add_gift_Box').click(function(){
jQuery('body').trigger('update_checkout');
});
});
</script>
<?PHP
}
}
3)增加费用的行动
add_action( 'woocommerce_cart_calculate_fees','woo_add_cart_fee' );
function woo_add_cart_fee( $cart ){
if ( ! $_POST || ( is_admin() && ! is_ajax() ) ) {
return;
}
if ( isset( $_POST['post_data'] ) ) {
parse_str( $_POST['post_data'],$post_data );
} else {
$post_data = $_POST; // fallback for final checkout (non-ajax)
}
if (isset($post_data['add_gift_Box'])) {
$extracost = 25; // not sure why you used intval($_POST['state']) ?
WC()->cart->add_fee( 'Ozdobne pudełka:',$extracost );
}
}