Woocommerce 订阅:将订阅订单 "Iteration" 号导出到 Shipstation
Woocommerce Subscriptions: Exporting Subscription Order "Iteration" Number to Shipstation
抱歉,这个标题太糟糕了。不过,这是我能想到的最好的。我有点难过要完成这个。
相关软件有:
- Woocommerce
- Woocommerce 订阅扩展
- Woocommerce Shipstation 集成扩展
我的最终目标是:每次收取订阅费用时,shipstation 应显示该订单的当前订阅 "iteration",即该商品作为订阅的一部分被收费了多少次。
因此,当客户最初订阅时,shipstation 应显示与该项目关联的“1”。如果订阅续订第六个月,并且按月计费,shipstation 应显示与该项目关联的“6”。
Woocommerce 订阅会跟踪此数字,如 'Subscriptions' 管理页面所示。就是 this screenshot.
右边突出显示的数字
这个数字是通过计算相关订单的数量生成的,因此从技术上讲,它并没有计算续订,但最终得出的结果与此相同。
第一个问题是它处于 'subscription id' 级别,要将其带到 shipstation,我们必须将其移动到 'order meta' 级别或 'order item meta' 级别.
由于一个订单理论上可以包含多个订阅,我认为将其置于 'order meta' 级别是行不通的。所以我认为必须将其分配给订单中实际商品的元信息。
Shipstation looks like this,因此在订单级别显示某些内容可能不可行,当您进入 'items ordered' 视图时,它会列出一些信息,例如 SKU 和变体。我不想把这个数字变成一个实际的变化,但看起来逻辑上应该有某种方式让信息显示在同一行中。
所以我想我必须:
1) 在订阅购买或续订时,计算关联订阅的相关订单数量并将其存储在 'order item meta' 中的某个位置。
2) 然后在每次导出适当的订单时将该信息提供给 shipstation。
我一直在 Google 上搜索,发现了一些可能与帮助我迈出第一步相关的信息,但我真的不确定我的课程。我无法将此数据作为实际的商品变体,所以我应该将其作为自定义商品属性吗?
任何正确方向的帮助或指示将不胜感激。我有点惊讶我找不到更多以前寻找类似功能的人。
提前致谢!
我想通了。对于如此简单的事情,我花了比它应有的时间更长的时间,但感觉好像缺少很多文档,而且我可以参考的许多其他用例涉及已弃用的功能等。
我最终将它放在 'order meta' 级别而不是 'order item meta' 级别,毕竟我意识到同时购买多个订阅项目仍然会将它们捆绑到一个订阅中,并具有单一的重复订单。
对于将来可能需要类似功能的任何人,这对我来说现在工作正常。
// woocommerce_subscription_payment_complete fires on both initial orders and renewals
add_action('woocommerce_subscription_payment_complete', 'add_iteration', 10, 2);
function add_iteration($subscription) {
// $subscription_id is extraneous and can be removed
$subscription_id = $subscription->id;
// gather relevant data
$payment_count = $subscription->get_completed_payment_count();
$related_orders = $subscription->get_related_orders();
$arrayKeys = array_keys($related_orders);
$parent_order_id = end($related_orders);
$current_order_id = $related_orders[$arrayKeys[0]];
// add data to order meta
update_post_meta($current_order_id, '_iterations', $payment_count);
}
// send it to shipstation
add_filter( 'woocommerce_shipstation_export_custom_field_2', 'shipstation_custom_field_2' );
function shipstation_custom_field_2() {
return '_iterations';
}
抱歉,这个标题太糟糕了。不过,这是我能想到的最好的。我有点难过要完成这个。
相关软件有:
- Woocommerce
- Woocommerce 订阅扩展
- Woocommerce Shipstation 集成扩展
我的最终目标是:每次收取订阅费用时,shipstation 应显示该订单的当前订阅 "iteration",即该商品作为订阅的一部分被收费了多少次。
因此,当客户最初订阅时,shipstation 应显示与该项目关联的“1”。如果订阅续订第六个月,并且按月计费,shipstation 应显示与该项目关联的“6”。
Woocommerce 订阅会跟踪此数字,如 'Subscriptions' 管理页面所示。就是 this screenshot.
右边突出显示的数字这个数字是通过计算相关订单的数量生成的,因此从技术上讲,它并没有计算续订,但最终得出的结果与此相同。
第一个问题是它处于 'subscription id' 级别,要将其带到 shipstation,我们必须将其移动到 'order meta' 级别或 'order item meta' 级别.
由于一个订单理论上可以包含多个订阅,我认为将其置于 'order meta' 级别是行不通的。所以我认为必须将其分配给订单中实际商品的元信息。
Shipstation looks like this,因此在订单级别显示某些内容可能不可行,当您进入 'items ordered' 视图时,它会列出一些信息,例如 SKU 和变体。我不想把这个数字变成一个实际的变化,但看起来逻辑上应该有某种方式让信息显示在同一行中。
所以我想我必须:
1) 在订阅购买或续订时,计算关联订阅的相关订单数量并将其存储在 'order item meta' 中的某个位置。
2) 然后在每次导出适当的订单时将该信息提供给 shipstation。
我一直在 Google 上搜索,发现了一些可能与帮助我迈出第一步相关的信息,但我真的不确定我的课程。我无法将此数据作为实际的商品变体,所以我应该将其作为自定义商品属性吗?
任何正确方向的帮助或指示将不胜感激。我有点惊讶我找不到更多以前寻找类似功能的人。
提前致谢!
我想通了。对于如此简单的事情,我花了比它应有的时间更长的时间,但感觉好像缺少很多文档,而且我可以参考的许多其他用例涉及已弃用的功能等。
我最终将它放在 'order meta' 级别而不是 'order item meta' 级别,毕竟我意识到同时购买多个订阅项目仍然会将它们捆绑到一个订阅中,并具有单一的重复订单。
对于将来可能需要类似功能的任何人,这对我来说现在工作正常。
// woocommerce_subscription_payment_complete fires on both initial orders and renewals
add_action('woocommerce_subscription_payment_complete', 'add_iteration', 10, 2);
function add_iteration($subscription) {
// $subscription_id is extraneous and can be removed
$subscription_id = $subscription->id;
// gather relevant data
$payment_count = $subscription->get_completed_payment_count();
$related_orders = $subscription->get_related_orders();
$arrayKeys = array_keys($related_orders);
$parent_order_id = end($related_orders);
$current_order_id = $related_orders[$arrayKeys[0]];
// add data to order meta
update_post_meta($current_order_id, '_iterations', $payment_count);
}
// send it to shipstation
add_filter( 'woocommerce_shipstation_export_custom_field_2', 'shipstation_custom_field_2' );
function shipstation_custom_field_2() {
return '_iterations';
}