【发布时间】:2018-09-02 14:53:29
【问题描述】:
所以我正在开发一个用于 woocommerce 的插件,并且我添加了一个用于包装的选择,无论是塑料袋还是卡通盒,每个都有不同的成本。
用户选择其中一个选项我需要 WordPress 来刷新价格并通过使用以下方法添加正确的费用来更新成本:
WC_Cart $cart->add_fee( 'Emballagegebyr', intval($fees));
添加 WC_Cart 费用和更新价格的最佳方式是什么?代码应该是什么样子?
是否可以使用 $_GET 和 $_POST 来获取值,或者更好的是有没有办法使用 AJAX 来更新价格而不刷新页面?
目前,我正在使用 $_GET 通过以下代码从浏览器获取数据
function at87_add_custom_fees( WC_Cart $cart ){
$fees = 3; // fee amount
$fees = isset($_GET['test']) ? $_GET['test'] : 3;
$cart->add_fee( 'Emballagegebyr', intval($fees));
}
然后我的计划是添加如下所示的 Javascript 代码,然后使用单选按钮刷新页面并传递所选选项。
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');
// });
$("#pakpose1 input:radio").change(function(){
// Do something interesting here
alert("test");
});
});
</script>
<?php
}
}
我不确定这是否是最聪明的方法,或者是否有其他方法,这可能会更好,它可能会产生什么安全影响,也许有一些钩子可以得到相同的结果工作完成。
顺便说一句:为了在结帐页面中获取单选按钮,我制作了插件,它覆盖了 woocommerce review-order.php 并在该模板中添加了单选按钮,如下所示:
<tr class="packing-selections">
<th>Pakning</th>
<td>
<input type="radio" id="pakpose1" name="pakpose" value="pakpose" checked="checked">Pak i pose <?php echo get_woocommerce_currency_symbol() ?>3.00<br>
<input type="radio" id="pakpose2" name="pakpose" value="pakkasse">Pak i papkasse <?php echo get_woocommerce_currency_symbol() ?>9.00
</td>
</tr>
【问题讨论】:
-
第一次加载页面时,您会向用户显示商品的价格吗?还是他们必须选择才能看到价格?为什么不在第一次加载页面时加载价格和每个选项的价格,而不是使用 JS 修改显示给用户的价格,而是根据发送到服务器的 $_POST 键计算实际价格。
-
好吧,我显示了每个选项的价格,所以有可能,然后我想我需要通过 JS 更新总价格,但是你如何确保正确的价格是一旦客户点击“下订单”,您如何使费用反映在发票中?
-
所以我不确定你必须绑定哪个钩子,但是提交时你检查 $_POST 值以获取提交表单的单选字段的值并添加 WC_Cart $cart->add_fee( 'Emballagegebyr', intval($fees));或其他代码行。
-
hookr.io/actions/woocommerce_cart_calculate_fees 在这里我看到一个钩子,当您在购物车中添加费用时。不确定这是否可行,您必须对其进行测试。另外我建议查看其他插件,看看他们是如何实现这一点的。 github.com/WPprodigy/woocommerce-product-fees/blob/master/…
标签: php jquery ajax wordpress woocommerce