WooCommerce 3.0破坏了我的应用程序,我现在无法弄清楚如何修复它。
我在此处运行添加/更改订阅时的操作:
在函数内部,我获取订单详细信息并查找变量订阅的订单项,以使用该选项更新我的自定义数据库,以及获取我通过woocommerce_form_field
添加的自定义订单元数据:
这不再有效,一切都会受到保护吗?如何更新它以使用3.0?
add_action( 'woocommerce_subscription_status_changed', 'update_subscription', 10, 3 );
function update_subscription( $id, $old_status, $new_status ) {
$sitelink_db = new SSLA_DB_Sitelink();
$order = new WC_Order( $id );
$items = $order->get_items();
$subscription_type = '';
$user_id = $order->get_user_id();
$sitelink_domain = get_post_meta( $order->id, 'ssla_sitelink_url', true );
foreach ($items as $item) {
if( "SiteLink Subscription" === $item['name'] ) {
$subscription_type = $item['brand'];
}
}
$customer_data = array(
'user_id' => $user_id,
'subscription_type' => $subscription_type,
'domain_referrer' => $sitelink_domain,
'active_subscription' => $new_status,
'date_modified' => date( 'Y-m-d H:i:s' ),
);
$sitelink_db->add( $customer_data );
}
基本上我需要获取要存储在我的数据库中的订阅的变体名称,以及我制作的自定义元字段。哪个不再适用
答案 0 :(得分:0)
这是我最好的猜测。这是不可能测试的,因为我没有和你一样的设置。
很少注意到:
$subscription
对象传递给woocommerce_subscription_status_changed
挂钩,让我们使用它。 $order->id
应该替换为WC3.0中的$order->get_id()
,但我们将使用$subscription
对象(订阅类扩展了订单类,因此它类似) WC_Order_Item_Product
时返回的get_items()
对象上使用getter,以便$item['name']
成为$item->get_name()
这是完整的代码块:
add_action( 'woocommerce_subscription_status_changed', 'update_subscription', 10, 4 );
function update_subscription( $subscription_id, $old_status, $new_status, $subscription ) {
$match_this_id = 99; // Change this to the product ID of your special subscription
$sitelink_db = new SSLA_DB_Sitelink();
$items = $subscription->get_items();
$subscription_type = '';
$user_id = $subscription->get_user_id();
$sitelink_domain = $subscription->get_meta( 'ssla_sitelink_url' );
foreach ($items as $item) {
if( $match_this_id === $item->get_product_id() ) {
$product = $item->get_product();
if( $product->is_type( 'variation' ) ){
$subscription_type = $product->get_attribute( 'brand' );
}
}
}
$customer_data = array(
'user_id' => $user_id,
'subscription_type' => $subscription_type,
'domain_referrer' => $sitelink_domain,
'active_subscription' => $new_status,
'date_modified' => date( 'Y-m-d H:i:s' ),
);
$sitelink_db->add( $customer_data );
}