我正在拼命尝试以编程方式获取与WooCommerce订阅对象关联的帖子ID。我从用户ID开始,并尝试使用get_posts函数请求数据库。使用get_users_subscriptions
的通话有效,但返回的对象不包含ID
,只包含关联的order_id
或product_id
。
$subscriptions = WC_Subscriptions_Manager::get_users_subscriptions(
$current_user->ID
);
$subscription_posts = get_posts( array(
'orderby' => 'date',
'order' => 'ASC',
'numberposts' => 1,
'meta_key' => '_customer_user',
'meta_value' => $current_user->ID,
'post_type' => 'shop_subscription'
) );
get_post
请求遗憾地返回一个空数组。你在我的请求中看到了什么问题吗?
提前致谢,
答案 0 :(得分:1)
我没有找到一个简单的解决方案所以我使用基于订阅对象中包含的order_id的SQL请求,我使用以下调用:
$subscriptions = WC_Subscriptions_Manager::get_users_subscriptions(
$current_user->ID
);
$ wpdb调用如下所示:
$subscription_id = $wpdb->get_var(
"SELECT ID
FROM $wpdb->posts
WHERE `post_type`='shop_subscription'
AND `post_parent`=$first_order->ID
ORDER BY `post_date` ASC
LIMIT 1;"
);
如果它对某人有帮助,那么欢迎您!
答案 1 :(得分:0)
我使用以下代码实现了同样的功能,如果您使用的是wp rest API,它还会为响应添加一个属性:
add_action(
'rest_api_init',
function() {
// add _subscription_id to wc-order response
register_rest_field( 'shop_order', '_subscription_id', [
'get_callback' => function ($order) {
$subscriptionIds = wcs_get_subscriptions_for_order( $order['id'] );
foreach( $subscriptionIds as $subscriptionId => $subscription )
if($subscription->order->id == $order['id']) break;
foreach( $order['meta_data'] as $meta )
if ($meta->key === '_subscription_renewal') {
$metaSubscriptionId = $meta->value; break;
}
return $subscriptionId ?: (int) $metaSubscriptionId;
},
'update_callback' => null,
'schema' => null,
]);
}
);