woocommerce自定义签出字段,用于将费用添加到订单ajax

我正试图在结帐时将定制费用计入订单总额。
我在woocommerce中添加了一个复选框

add_action('woocommerce_后面的_checkout_billing_form','add_box_option_to_checkout');
函数将\框\选项\添加到\签出($checkout){
echo'<div id=“消息字段”>
woocommerce\u表单\u字段('add\u gift\u box',数组(
'键入'=>'复选框',
'class'=>数组('add_gift_box form row-wide'),
“标签”=>uuuuuuuuiośćpudełek ozdobnych-25 PLN/szt),
“占位符”=>_uu(“”),
),$checkout->获取价值(“添加礼品盒”);
}

包含一个自定义js文件,可用于处理事件

jQuery(文档).ready(函数($){
$(“#添加礼品盒”)。单击(函数(){
风险值数据={
行动:“woocommerce\u添加\u礼品盒”,
声明:“200”,
};
jQuery.ajax({
键入:“POST”,
url:wc_checkout_params.ajax_url,
数据:数据,
成功:功能(代码){
控制台日志(代码);
jQuery(’body’)。触发器(’update_checkout’);
},
数据类型:“html”
});
});
});

和一个php费用处理函数

功能woo\u添加购物车费用($data){
如果(定义了('DOING_AJAX')| |!$_POST)返回;
$extracost=0;
如果(isset($_POST['state'])){
$extracost=intval($_POST['state']);
}
WC()->购物车->增加费用('Ozdobne pudełka:',$extracost);
}
添加操作(“woocommerce\u cart\u calculate\u fees”、“woo\u add\u cart\u fee”);
添加行动(“wp\u ajax\u woocommerce\u add\u礼品盒”、“woo\u add\u cart\u fee”,10);
添加行动(“wp\u ajax\u nopriv\u woo commerce\u add\u礼品盒”、“woo\u add\u cart\u fee”,10);

由于某些原因,$\u POST[‘state’]的值没有被添加,当我给出一个硬编码的值时,该函数可以工作,我尝试了许多选项,但无法使其工作

我看到过类似的帖子,但都没有答案

post数据由“post_数据”中的AJAX函数发送,并序列化。因此,要获取复选框的值,只需解析\u str()这个

parse_str($_POST['POST_data'],$POST_data);

然后,您可以从$post\u data['add\u gift\u box']获取“add\u gift\u box”选项。请注意,订单完成后,此“post_数据”元素不再可用,所有内容都在$\u post

完整的示例,基于您的代码:


1) 将复选框添加到签出

add_action('woocommerce_后面的_checkout_billing_form','add_box_option_to_checkout');
函数将\框\选项\添加到\签出($checkout){
echo'<div id=“消息字段”>
woocommerce\u表单\u字段('add\u gift\u box',数组(
'键入'=>'复选框',
'class'=>数组('add_gift_box form row-wide'),
“标签”=>uuuuuuuuiośćpudełek ozdobnych-25 PLN/szt),
“占位符”=>_uu(“”),
),$checkout->获取价值(“添加礼品盒”);
回音“</div>”;
}

2) 单击复选框时更新购物车的脚本(无需额外的AJAX请求!)

add_动作('wp_footer'、'woocommerce_add_gift_box');
功能:商务添加礼品盒(){
if(is_checkout()){
?>
<script type=“text/javascript”>
jQuery(文档).ready(函数($){
$(“#添加礼品盒”)。单击(函数(){
jQuery('body')。触发器('update_checkout');
});
});
</script>
<?php
}
}

3) 添加费用的操作

add_action('woocommerce_cart_计算费用','woo_add_cart_费用');
功能woo_添加购物车费用($cart){
如果(!$_POST | |(is_admin()&!is_ajax())){
回来
}
如果(isset($_POST['POST_data'])){
parse_str($_POST['POST_data'],$POST_data);
}否则{
$post\u data=$\u post;//最终签出的回退(非ajax)
}
if(isset($post_数据['add_礼品盒]])){
$extracost=25;//不确定为什么使用intval($\u POST['state'])?
WC()->购物车->增加费用('Ozdobne pudełka:',$extracost);
}
}

发表评论