当前问题:我的结帐计算器过于频繁地刷新运费,目前它会在我更改付款方式时更新/刷新运费,或者我选择不同的运输方式以及当我更改地址字段或修改购物车中的数量时它甚至会在浏览器中打开购物车时进行。(我了解某些商家可能需要更新这些信息,因为与某些支付网关或运输方式相关的费用,但对我来说,当我所做的只是点击本地取货或其他不应该的东西时,为什么我需要再次拉动实时运费?对运输承运人费率没有任何影响)
我要完成的工作:我希望结帐/购物车计算器一起停止自动更新/刷新运费,直到结帐结束,在我将所有归因因素输入必要的适当字段后,它应该放置 1电话,至少是国际海事组织。
我已经阅读了数百篇文章,但我发现的只是确保结帐计算器在某些 Ajax 调用上刷新的方法,我需要在任何情况下禁用它。我在这里还是新手,所以如果我违反了某些协议,我深表歉意,请原谅,任何帮助将不胜感激。
更新:在考虑了更多之后,我觉得一个完美的解决方案(如果可能的话)是在结帐计算运输区域放置一个按钮,或者在允许我或客户手动拉运费的下订单按钮下方API 并在必要时更新总数并取消整个自动过程(这也将使我受益,因为 woocommerce 将在每次击键后停止尝试进行新调用),但这也需要一个函数或类似的东西除非在下订单按钮之前立即按下此手动按钮,否则不会下订单(并且他们需要在更改任何地址字段或更改运输方式或任何其他会影响订单的因素时再次按下它总计,排除姓名、电话号码、公司名称等内容,或您能想到的任何其他字段都不会影响订单总额)。
8 小时后 - 我仍然对这没有真正的结果感到头疼。我唯一完成的就是用这个隐藏购物车中的运输计算
function disable_shipping_calc_on_cart( $show_shipping ) {
if( is_cart() ) {
return false;
}
return $show_shipping;
}
add_filter( 'woocommerce_cart_ready_to_calc_shipping', 'disable_shipping_calc_on_cart', 99 );
但它实际上并没有停止 API 调用,只是隐藏了它。虽然我认为不必为该字段生成 UI 可能会节省一些时间,但它的数量可以忽略不计。如果只有购物车会像在桌面下拉或移动侧边栏中那样显示订单总额/税金明细,这将大大加快我的购物车体验。无论哪种方式,我都希望它不在购物车中。
令人沮丧的是,如果整个自动更新在最后等待按钮按下,我会节省很多时间。以及我的客户。我的意思是这没有意义。让我通过几轮测试来描述我的工作流程。八个支付网关自定义配置了授予可见性的规则,所有这些都需要通过每个变量进行测试&这里显然必须如何测试前端(至少在我的情况下,我对此很陌生&我什至从未考虑过建立一个网站,直到我在 3-4 个月前被联系到它)。我将通过直接进入我的许多订单中的一个进入购物车的部分来缩短整个体验。
购物车在浏览器中打开...发货 API 调用 10-15 秒进行回调,如果需要更新一些订单数量...发货 API 调用 10-15 秒,(如上所述,这里没有可见的运费计算。所以感谢上帝我不能被其他人绊倒...运输 API 调用 10-15 秒,而仍在购物车中),继续结帐,帐户凭据自动填充字段...运输 API 调用 10-15 秒,我可能需要测试运输跨越更远的距离或商业/住宅费率,因此更改地址字段....运输 API 调用 10-15 秒,选择运输方法...运输 API 调用 10-15 秒,选择付款方式和...是的运输 API 调用10-15 秒..... 最后我可以通过前端下订单。:( 听起来让你筋疲力尽?不会 绕过所有这些 Shipping API 调用并在结帐的最后完成 1 是否有意义?嗯,这就像结帐体验中可能损失的 2 分钟时间。该呼叫应在 1、10-15 秒手动按钮按下更新后得到解决。
IDK 现在大约有 10 个小时......当我从除邮政编码之外的所有结帐字段中删除 update_totals_on_change 时,我取得了更多进展。我启用 ZIP 是因为我担心这种方法可能会让您完成其余的订单流程。然后回到运输字段更改地址而不触发 update_total 并进行订单处理。在这一点上,我不确定这是否有必要,但我认为如果有任何因素真正影响订单总额,那就是邮政编码,如果所有其他地址字段都没有,我的运输 API 将不会让订单处理与邮政编码相关联。所以我虽然比较安全。因此,这将为这些字段节省大量时间(尽管这些字段不会像运输和付款无线电那样在 API 调用时锁定,但至少它可以节省你在最后一次击键后等待 1 的时间。除非最后一次击键是在 ZIP 字段中,否则我可能需要将该字段重新定位到表单的更远位置,以使其能够在此过程中更早地开始。哎呀,切线很长,但大声思考...)嗯,如果只有自动化流程允许您在通话期间切换这些收音机,您就可以一次完成订单并让流程一直在做它的事情,最终在最后,在开销方面似乎有点低效,但听起来像是我想到的最合理的想法......是的,解锁所有字段/无线电,无论如何......当 API 正在处理......我的m get at 是一种在更新/刷新期间无法交互的灰色区域的方法......有什么想法吗?除非最后一次击键是在 ZIP 字段中,否则我可能需要将该字段重新定位到表单的更远位置,以使其能够在此过程中更早地开始。哎呀,切线很长,但大声思考...)嗯,如果只有自动化流程允许您在通话期间切换这些收音机,您就可以一次完成订单并让流程一直在做它的事情,最终在最后,在开销方面似乎有点低效,但听起来像是我想到的最合理的想法......是的,解锁所有字段/无线电,无论如何......当 API 正在处理......我的m get at 是一种在更新/刷新期间无法交互的灰色区域的方法......有什么想法吗?除非最后一次击键是在 ZIP 字段中,否则我可能需要将该字段重新定位到表单的更远位置,以使其能够在此过程中更早地开始。哎呀,切线很长,但大声思考...)嗯,如果只有自动化流程允许您在通话期间切换这些收音机,您就可以一次完成订单并让流程一直在做它的事情,最终在最后,在开销方面似乎有点低效,但听起来像是我想到的最合理的想法......是的,解锁所有字段/无线电,无论如何......当 API 正在处理......我的m get at 是一种在更新/刷新期间无法交互的灰色区域的方法......有什么想法吗?嗯,我可能需要将字段重新定位到表单的更远位置,以使其在流程中更早开始。哎呀,切线很长,但大声思考...)嗯,如果只有自动化流程允许您在通话期间切换这些收音机,您就可以一次完成订单并让流程一直在做它的事情,最终在最后,在开销方面似乎有点低效,但听起来像是我想到的最合理的想法......是的,解锁所有字段/无线电,无论如何......当 API 正在处理......我的m get at 是一种在更新/刷新期间无法交互的灰色区域的方法......有什么想法吗?嗯,我可能需要将字段重新定位到表单的更远位置,以使其在流程中更早开始。哎呀,切线很长,但大声思考...)嗯,如果只有自动化流程允许您在通话期间切换这些收音机,您就可以一次完成订单并让流程一直在做它的事情,最终在最后,在开销方面似乎有点低效,但听起来像是我想到的最合理的想法......是的,解锁所有字段/无线电,无论如何......当 API 正在处理......我的m get at 是一种在更新/刷新期间无法交互的灰色区域的方法......有什么想法吗?
第二天 - 在我的工作中昏倒后,我没有时间测试从运输字段中删除 update_totals_on_change 做了什么。不幸的是,今天早上我发现这没有任何效果。所有地址字段仍然会在更改时自动更新,令人失望。我正在考虑添加更好的可用性插件以允许在结帐时更改数量。这至少可以消除进入购物车页面的任何需要。这样可以减少一两步。
另一个更新:所以我在 wp-content/plugins/woocommerce/templates/checkout/payment.php 中找到了这段代码
<?php esc_html_e( 'Since your browser does not support JavaScript, or it is disabled, please ensure you click the <em>Update Totals</em> button before placing your order. You may be charged more than the amount stated above if you fail to do so.', 'woocommerce' ); ?>
<br/><button type="submit" class="button alt" name="woocommerce_checkout_update_totals" value="<?php esc_attr_e( 'Update totals', 'woocommerce' ); ?>"><?php esc_html_e( 'Update totals', 'woocommerce' ); ?></button>
</noscript>
因此,如果您的浏览器不支持 java 脚本,似乎会有一些东西会传播所述按钮。但是,我不想为我的整个网站禁用 javascript,但也许我只能在结帐时禁用它,除了在结帐时生成上述按钮之外,它不会有太大影响。对此,再次提出任何建议将不胜感激。
新信息-所以在一次又一次地翻过来之后。我发现,通过禁用 jquery-blockui 脚本,它将允许我更改结帐中的任何字段,而不会在通话期间锁定。但是,当禁用时,不会在字段更改时发出呼叫,因此我需要找到一种手动启动呼叫的方法,然后以某种方式将其锁定,因此客户必须在下订单之前立即更新。