我在woocommerce\u cart\u calculate\u fees
上添加了自定义费用:
add_action('woocommerce_cart_calculate_fees', 'delivery_surcharge');
function delivery_surcharge() {
global $woocommerce;
// ...
$woocommerce->cart->add_fee('Delivery fee', $fee, false, '');
}
但一旦用户点击结帐,费用就被删除,而不是计入总数。
我已通过执行以下检查来验证在调用woocommerce\u checkout\u过程时,费用尚未被删除:
add_action('woocommerce_checkout_process', 'checkout_validator');
function checkout_validator() {
global $woocommerce;
wc_add_notice($woocommerce->cart->get_total(), 'error');
}
这给了我一个错误,结帐时显示的总额,其中包括自定义费用。但是,当我第二次单击checkout时,费用已经消失,需要第二次调用
woocommerce\u cart\u calculate\u fees
才能再次显示。
此外,当签入
woocommerce\u checkout\u过程时,
WC\u Cart::get\u fees()
返回的数组中也存在费用。
编辑:请参阅更新5。
“Woocommerce不会将我的自定义费用添加到购物车总额中”-相关但没有有用的答案
更新1:我将以下内容添加到
WC\u Checkout::create\u order()
:
251 // Store fees
+ 252 error_log(print_r(WC()->cart->get_fees(), true));
253 foreach ( WC()->cart->get_fees() as $fee_key => $fee ) {
输出一个空数组,这意味着费用在结账处理和订单创建之间的某个时候被删除。
更新2:我执行了另一个类似于上面的调试检查,这次是通过添加到
WC\u Shortcode\u Checkout::Checkout()
:
230 // Check cart has contents
231 if ( WC()->cart->is_empty() ) {
232 return;
233 }
+ 234
+ 235 error_log(print_r(WC()->cart->get_fees(), true));
236
237 // Check cart contents for errors
238 do_action( 'woocommerce_check_cart_items' );
结果又是一个空数组。
更新3:最后,一些进展!我再次执行了类似的检查,这次是在
WC\u Checkout::process\u Checkout()
上执行的,该检查由WC\u Ajax::Checkout()
调用:
359 if ( ! defined( 'WOOCOMMERCE_CHECKOUT' ) ) {
360 define( 'WOOCOMMERCE_CHECKOUT', true );
361 }
+ 362
+ 363 error_log(print_r(WC()->cart->get_fees(), true));
364
365 // Prevent timeout
366 @set_time_limit(0);
而费用实际出现在
错误日志中
!
[12-Aug-2016 13:45:24 UTC] Array
(
[0] => stdClass Object
(
[id] => delivery-fee
[name] => Delivery fee
[amount] => 4
[tax_class] =>
[taxable] =>
[tax] => 0
[tax_data] => Array
(
)
)
)
我将继续跟踪此功能,直到(希望)发现未设置费用的确切位置。
更新4:在
WC\u Checkout::process\u Checkout()
调用WC\u Cart::calculate\u totals()
之后,我设法找到了费用未结算的地方。进一步调查。
更新5:我已完全找到问题所在。显然
WC\u Cart::calculate\u totals()
调用WC\u Cart::reset()
,这将取消所有费用。我不知道这是怎么回事,但不知何故,在之前,这笔费用在调用WC\u Cart::reset()
后幸存了下来。在这一点上,我不确定这是我的实现中的错误还是WooCommerce本身的错误。
您可以禁用使用此代码重置费用的操作。
remove_action('woocommerce_cart_reset', array(WC()->cart->fees_api(), 'remove_all_fees'));
我自己解决的。事实证明,在我特定的、过时的woocommerce版本中,woocommerce\u cart\u calculate\u fees
没有被正确调用是一个问题。更新解决了这个问题。
因此,我正在开发一个插件的WooCommerce,我已经添加了一个选择包装,无论是在塑料袋或在卡通盒与每个有不同的成本。 用户选择一个选项,我需要WordPress来刷新价格,并通过使用添加正确的费用来更新成本: 增加WC_购物车费用并更新价格的最佳方式是什么?代码应该是什么样子? 使用$\u GET和$\u POST获取值可以吗?或者更好的方法是使用AJAX更新价格而不刷新页面吗? 目前,我使用
帐号被登出 当前用户登录失效、异地登录时,都会发送这个消息。 消息体 EventUserLoginInvalid 例子 Kolin @Subscribe(threadMode = ThreadMode.MAIN) public fun onReceivedUserEvent(eventUserLoginInvalid: EventUserLoginInvalid){ // TODO
我在为 端口设置 消费者以捕获消息时遇到问题。我的: 申请开始: 并且<code>514</code>端口已打开但未侦听 我可以在tcpdump中看到,tcpdump-I eth1-nn-A-s 0端口514和udp正确发送和接收消息。 有人能告诉我我做错了什么吗?
我们有一个应用程序,消费者读取一条消息,线程执行许多操作,包括在生成另一主题的消息之前访问数据库。在线程上消耗和生成消息之间的时间可能需要几分钟。一旦生成了指向新主题的消息,就会进行提交,以表明我们已经完成了对消费者队列消息的处理。自动提交因此被禁用。 我正在使用高级消费者,我注意到的是zoowatch和kafka会话超时,因为我们在消费者队列上做任何事情之前需要太长时间,所以kafka每次线程返
本文向大家介绍消费者和消费者组有什么关系?相关面试题,主要包含被问及消费者和消费者组有什么关系?时的应答技巧和注意事项,需要的朋友参考一下 每个消费者从属于消费组。具体关系如下:
最近,我们与Kafka消费者和生产商之间出现了一些性能问题。我们在scala中使用Kafka Java API。打开和关闭消费者和生产者对象的良好做法是什么?我认为这是一个非常开放的问题,正确的答案总是,但我正在尝试对此进行推理。 消费者可以长时间运行连接并保持开放吗? 当我们完成信息生成时,生产者是否应该关闭?