gpt4 book ai didi

javascript - WooCommerce - 根据自定义字段添加费用

转载 作者:行者123 更新时间:2023-12-03 22:25:34 25 4
gpt4 key购买 nike

我试图根据我添加的自定义复选框是否选中来向结帐添加费用。我真的很接近让这个工作,但我在获取后值以确定是否应该收取费用时遇到问题。

这是我的自定义字段的代码:

add_action( 'woocommerce_after_checkout_billing_form', 'my_custom_fields' );
function my_custom_fields( $checkout ) {


echo '<div id="message_fields"><h3>' . __('Add a Message') . '</h3>';
woocommerce_form_field( 'add_gift_message', array(
'type' => 'checkbox',
'class' => array('gift_message form-row-wide'),

'label' => __('5x7 Enclosed Personal Message - $4'),
'placeholder' => __(''),
), $checkout->get_value( 'add_gift_message' ));

woocommerce_form_field( 'gift_message', array(
'type' => 'textarea',
'class' => array('gift_message_text form-row-wide'),

'label' => false,
'placeholder' => __('Your message'),
), $checkout->get_value( 'gift_message' ));
echo '</div>';
}

这有效,并且字段显示完美。

在我的主题中 form-checkout.php 的底部,我添加了这个 javascript 来更新它检查的字段时的购物车总数:
<script type="text/javascript">
jQuery( document ).ready(function( $ ) {

$('#add_gift_message').click(function(){
if ( $(this).is(':checked') ) {
$('#gift_message_field').show();
var gift_message= true;
} else {
$('#gift_message_field').hide();
var gift_message = false;
}
$.ajax({
type: 'POST',
url: wc_checkout_params.ajax_url,
data: $( 'form.checkout' ).serialize(),
success: function( response ) {
if ( response ) {
var order_output = $(response);
$( '#order_review' ).html( $.trim( order_output ) );
$('body').trigger('update_checkout');
}
},
error: function(code){
},
dataType: 'html'
});
});
});
</script>

这会更新订单总数并运行以下代码 (这就是问题所在) :
add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' );

function woo_add_cart_fee( $data ){
global $woocommerce;

if ( isset($_POST['add_gift_message']) )
$woocommerce->cart->add_fee( 'Personal Gift Message', '4.00', true, 'standard' );

}

我知道这部分正在被调用,因为如果我取出 if (isset($_POST['add_gift_message'])),它会增加费用。我遇到的问题是确定该字段是否已被检查 - 无论我做什么,我似乎都无法在 woo_add_cart_fee 中获取 POST 值。

有谁知道如何让这个工作?谢谢!!

最佳答案

无法从$_POST['add_gift_message']获取值(value)的原因是因为 update_checkout是一个 ajax 事件,它将表单数据序列化为 $_POST['post_data'] .因此,为了满足在(ajax)之前和(非ajax)用户 checkout 之前获取值,您可以使用以下代码获取该值:

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_message'] ) ) {

$woocommerce->cart->add_fee( 'Personal Gift Message', '4.00', true, 'standard' );
}

供引用,可以看这个 post

关于javascript - WooCommerce - 根据自定义字段添加费用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29309230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com