使用基于WooCommerce结帐应答代码中的选择字段添加动态费用,我成功地在复选框更改中添加了新费用:
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);
}
未选中时,如何删除费用?
这是一个礼品包装选项,如果选择额外的费用将在结账时添加到总额中。如果未选择,则应删除费用并更新结账。
您只需在代码中做一些小更改,如:
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()) :
?>
<script type="text/javascript">
jQuery(function($) {
$('form.checkout').on('change', 'input#chosen_packing', function() {
$.ajax({
type: 'POST',
url: wc_checkout_params.ajax_url,
data: {
'action': 'woo_get_ajax_data',
'packing': $(this).prop('checked') ? 1 : 0,
},
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
else:
WC()->session->__unset('chosen_packing');
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;
if( WC()->session->get('chosen_packing') ){
$label = __('Embrulho', 'woocommerce');
$cost = 5;
$cart->add_fee($label, $cost);
}
}
代码进入活动子主题(或活动主题)的functions.php文件。测试和工作。
我使用更新费动态基于单选按钮在WooCommerce结账答案代码解决方案,工作非常好,我添加复选框字段与不同的价格为每一个,价格变化反映在结账。 但是我需要一些帮助:当我选择一种附加税的包装时,它会出现在订单区的后端,但只显示价格,我也想显示标题。 复选框选项有: 如何使其在订单上显示名称?是否可以将复选框改为选择字段?
在Woocommerce结帐页面中,我正在尝试在结帐页面上添加一个复选框 我参考了这些文章 WooCommerce自定义结账字段添加费用订购ajax 用于在WooCommerce中添加/删除自定义费用的复选框字段 添加一个结帐复选框字段,在WooCommerce中启用百分比费用 它不能像我希望的那样工作。我做错了什么? 任何帮助都很感激。
需要根据表单复选框元素添加自定义费用到购物车。基于购物车中产品类别的当前操作非常有效,并增加了自定义送货费,但客户可以选择免费提货。复选框选中交付触发器WooCommerce可以添加自定义费用操作吗? 使用例子从"执行一个动作对复选框选中或未选中的事件在html表单"可以. Change(函数)函数传递(id){如果(this.checked){add_action自定义购物车费用? 选中复选框时
我正在尝试根据是否已选中自定义复选框向签出添加费用。我真的很接近让这项工作,但我有问题获得后的价值观,以确定是否应申请或不收费。 以下是我自定义字段的代码: 这是可行的,而且字段显示得非常完美。 在我的主题中form-checkout.php的底部,我添加了以下javascript,以在检查字段时更新购物车总数: 这将更新订单总数并运行以下代码(这就是问题所在): 我知道这部分被调用是因为如果我去
我目前有以下情况: 我有多个复选框,一旦单击任何复选框,它的值将添加到数组中。如果未选中该复选框,则需要再次将该项从数组中删除。 以下操作有效,并将它们添加到我的中。但当再次选中该复选框时,它不会被删除。当然,我可以使用
我正试图在结帐时将定制费用计入订单总额。我在woocommerce中添加了一个复选框 包含一个自定义js文件,可用于处理事件 和一个php费用处理函数 由于某些原因,$_POST['state']的值没有被添加,当我给出一个硬编码值时,函数会工作,我尝试了很多选项,但无法让它工作。 我看过类似的帖子,但没有一个有答案。