php - Woocommerce 通过 ajax 更新结帐时的运输方式

标签 php ajax wordpress datepicker woocommerce

我想要完成的事情:在 woocommerce 中,我需要在用户选择日期时检查通过日期选择器字段传递的日期,然后通过 ajax 相应地更新运输选项,这样事情喜欢包邮的可以在不合适的时候取出。

我目前知道/已经弄清楚的是:我目前有 jQuery 事件触发并通过日期发送到自定义脚本,这是我需要做的事情。我无法在 woocommerce 类中找到仅返回运输数据的函数,所以我认为我不能调用它并将其作为片段返回,就像他们已经为结帐所做的那样。

不过,我确实发现了

WC_AJAX::update_order_review()

里面有一个 Action 调用,我已经成功地将一个函数挂接到那个 Action 上,并且我已经能够触发

t( 'body' ).trigger( 'update_checkout' );

这会触发更新结帐审查 block 的操作。

我真正的问题:这一切都很好,我看起来没有朝着正确的方向前进,但我对 woocommerce 的了解不够深,不知道如何在其中获取运输方式我的钩子(Hook) Action 根据需要解除它们。有谁知道我是否可以通过 $woocommerce 全局对象获取它们,然后让 WC_AJAX 方法的其余部分读取它们?

如有任何帮助,我们将不胜感激。

** 注意:是的,我知道在 jQuery 中那是“t”而不是“$”。不是错误

最佳答案

所以,对于那些可能需要它的人来说,它需要在 woocommerce 中做一些小改动,因为它们处理购物车/结帐值输出的方式,用于运输和支付选项,但最终,我可以实现它使用 woocommerce 的钩子(Hook),插件修改很少,所以,一个非常干净的解决方案。

基本上我所做的是使用 woocommerce session 、两个 Hook 和一个刷新结帐订单审查的 javascript 触发器。

通过 WC_AJAX::update_order_review 中发生的 woocommerce_checkout_update_order_review Hook 的组合以及使用上述 $( 'body' ).trigger( ' update_checkout' ); 调用,我可以连接到更新结帐审查 block 的操作。到目前为止一切顺利。

我在这个函数中所做的是检查字段是否有值,如果有,将其保存在 WC()->session 中。然后,由于 WC_AJAX::update_order_review 调用 woocommerce_order_review() 来获取所有更新的购物车和送货方式,我查看了与该函数关联的模板并找到了另一个钩子(Hook),woocommerce_review_order_before_shipping,它允许我在购物车模板循环之前修改送货方式,并在 wc_cart_totals_shipping_html() 中构建送货选项。

现在,我知道,您在想,等等,我需要结帐送货方式,而不是购物车送货方式,但实际上,它们似乎是一样的。

希望我浪费的时间能帮助遇到类似问题的其他人。

干杯。

关于php - Woocommerce 通过 ajax 更新结帐时的运输方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29777497/

相关文章:

php - 如何使用 CodeIgniter 连接两个具有相同字段名的表并以数组形式返回这两个表?

WordPress HTTP 请求 501 内部服务器错误

javascript - Chrome 无法像 Firefox、Safari 一样处理分块响应

javascript - 测量同一页面多个 AJAX 调用的处理时间

wordpress - 如果用户未登录,woocommerce 结帐页面重定向

mysql - Wordpress/codeigniter 传输sql数据库密码

php - Robots.txt 正在阻止 Google 访问 WordPress 网站

php - 插入批量 php mysql,检查重复项和字段重复项的总和值

php - 将MySQL日期时间转换为不同时区

javascript - Ajax卡在beforeSend阶段,不向PHP发送数据