Woocommerce运费计算经常运行。
Woocommerce送货设置在您构建通过HTTP API调用使用外部报价系统的自定义送货插件之前非常有效,这时您意识到在订单处理过程中不必要地计算了数十次送货-减慢了一切。 >
我们通过澳大利亚邮政系统和快递聚合系统对外部服务器进行API调用,以获取邮寄和运输费率。完成两个API调用大约需要5秒钟,并且由于calculate_shipping()
函数似乎是在每次购物车添加和修改时,在进入结帐页面时,然后在对结帐中相关地址字段的每一次击键中都被调用的页面上有5秒的延迟,到处都有不必要的HTTP调用。
结帐页面上每个击键的ajax调用似乎也都排队等待一个接一个地处理,因此用户可以坐30秒钟,然后查看运送选项,然后清除几次,然后再选择一个
另一个愚蠢的后果是,由于引用不完整的地址而导致的错误最终导致屏幕滚动到显示通知的顶部,从而使用户无法完成地址的输入。
所以问题是如何阻止WC致电calculate_shipping()
直到所有运输领域都已完成并且最后一个领域失去了焦点-或采取其他类似措施并避免多次呼叫的其他建议。
为了删除每次添加购物车时的运费计算,我仅测试了当前请求URI,如果不是,则直接返回
if ('https://aaa.bbb/checkout/' !== $_SERVER['HTTP_REFERER']) {
return;
}
但是似乎还可以,我希望稍后会出现一些复杂情况,否则为什么在每次添加购物车时WC都会这样做?
在结帐时,虽然情况有所不同。
我需要运行运行程序,但不需要在键入地址字段的每个新字符上运行,因为这似乎是默认功能。
似乎有一个计时器在起作用,如果您在输入地址期间暂停一秒钟以上,它将触发update_checkout()
或类似的呼叫calculate_shipping()
的程序,因此我最终联系了邮政服务器和信使服务器要求新的报价。 (我敢肯定他们会厌倦这种DOS攻击)
我一直在研究checkout.js脚本,但真的不想弄乱WC功能并且无法更新,所以不确定我是否要更改它。
在此阶段不相关
我要等到所有物品都放入购物车并且用户输入完地址后才计算运费-其他似乎有点愚蠢。