What i'm trying to accomplish: 在woocommerce中,当用户选择日期时,我需要检查通过datepicker字段发送的日期,然后通过ajax相应地更新送货选项,以便在不合适时可以取出免费送货之类的东西 .
What I currently know/have figured out: 我目前正在触发jQuery事件并通过日期发送到自定义脚本,这是我需要做的事情 . 我无法在woocommerce类中找到只返回发货数据的函数,因此我认为我不能将其作为片段返回并将其作为片段返回,就像它们已经用于结账一样 .
但是,我确实找到了
WC_AJAX::update_order_review()
在其中有一个动作调用,我已经成功地将一个函数挂钩到该动作上,并且我已经能够触发该动作
t( 'body' ).trigger( 'update_checkout' );
它会触发更新结帐审核块的操作 .
My real question: 所有这一切都很棒,而且我很了解woocommerce,知道如何在我的钩子动作中获取运输方法,以便在必要时取消它们 . 有谁知道我是否可以通过$ woocommerce全局对象获取它们,然后让它们被其余的WC_AJAX方法读取?
这里的任何帮助将不胜感激 .
**注意:是的,我知道jQuery中的't'而不是'$' . 不是一个错误
3 回答
因此,对于那些可能需要这些的人来说,它需要在woocommerce中进行一些尝试,因为他们处理运输和支付选项的购物车/结账 Value 的输出方式,但最终,我可以使用woocommerce的钩子来实现它,以及非常少的插件修改,所以,一个非常干净的解决方案 .
基本上我所做的是使用woocommerce会话,两个钩子和一个刷新结账订单审查的javascript触发器 .
通过
WC_AJAX::update_order_review
中发生的woocommerce_checkout_update_order_review
钩子和使用前面提到的$( 'body' ).trigger( 'update_checkout' );
调用的组合,我可以参与更新结账审查块的操作 . 到现在为止还挺好 .我在这个函数中所做的是检查字段是否有值,如果有,则将其保存在
WC()->session
中 . 然后,自WC_AJAX::update_order_review
调用woocommerce_order_review()
以获取所有更新的购物车和运输方法后,我查看了与该功能相关的模板并找到了另一个钩子woocommerce_review_order_before_shipping
,它允许我在购物车模板循环之前修改运输方法并构建运输wc_cart_totals_shipping_html()
中的选项 .现在,我知道,你在想,等等,我需要结账运输方法,而不是购物车,但实际上,它们似乎是同一个 .
希望我浪费的时间会帮助其他有类似问题的人 .
干杯 .
因此,特雷弗的回答对我来说并不完全有效(也许WC自制作以来已经改变了),但确实让我朝着正确的方向前进 .
我使用了一些略有不同的滤镜 . 我需要解决的问题是根据自定义字段添加/删除某些送货选项 .
上面的代码片段是我的代码的不完整版本,但应该得到重点 . 在javascript控制台中输入
jQuery( 'body' ).trigger( 'update_checkout' );
可以轻松测试它 .感谢Trevor的提示 .
如果有人想更新购物车:
更改数量然后更改回来 . 并且运输重新计算 .
(超过5个小时的代码浏览,下次我将编写整个网店,只需使用一个好的框架和完全可定制的OMG)