php - 为外部送货服务购买订单时哪个 Woocommerce 挂钩
问题描述
有时不会调用函数 woocommerce_thankyou,但有时可以正常工作。
我们的代码是:
add_action(‘woocommerce_thankyou’, ‘send_order_information_for_delivery’, 999, 1);
function send_order_information_for_delivery($order_id)
{
$order = wc_get_order($order_id);
$order_items = $order->get_items();
// … …
}
知道为什么有时不起作用吗?
此方法的主要目的是获取采购订单及其项目的信息,并通过 API 将它们发送到另一个数据库。
奇怪的是,在某些命令中,该方法没有被调用。
解决方案
相反,您可以尝试使用以下挂钩函数,在处理交付数据后,该函数仅适用于定义的订单状态一次。
add_action( 'woocommerce_order_status_changed', 'delivery_information_process', 20, 4 );
function delivery_information_process( $order_id, $old_status, $new_status, $order ){
// Define the order statuses to check
$statuses_to_check = array( 'on-hold', 'processing' );
// Only "On hold" order status and "Free Shipping" Shipping Method
if ( $order->get_meta( '_delivery_check', true ) && in_array( $new_status, $statuses_to_check ) )
{
// Getting all WC_emails objects
foreach($order->get_items() as $item_id => $item ){
$product = $item->get_product();
$sku = $product->get_sku();
}
## ==> Process delivery data step
// Once delivery information is send or processed ==> update '_delivery_check' to avoid repetitions
$order->update_meta_data( '_delivery_check', true );
}
}
代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。
推荐阅读
- docker - Gitlab在docker镜像中运行阶段
- javascript - 不是从IOS、Android移动到form.action=result path?
- c - 无法调试我的简单 C 程序以获取 y/n 输入
- sed - 根据第一个字符选择记录
- django - Django在自定义中间件中计算变量值并传递给所有视图函数
- go - 为什么golang在编译wasm目标时将符号数限制为65535?
- c# - 备份和恢复 Sqlite 数据库到谷歌驱动器
- c++ - 这三个对象初始化有什么区别
- spring-boot - 恰好两个 Kafka 集群
- java - 如何使用 Java 从 Json 字符串中提取 Json 值?