使用订单ID的逗号分隔字符串访问WooCommerce订阅数据

时间:2019-10-09 13:02:18

标签: php wordpress woocommerce

尝试使用wcs_get_subscriptions函数来检索订阅信息以创建可打印标签。

我让插件在查询字符串中传递以逗号分隔的订单ID列表到脚本中,但是我不确定如何将ID字符串传递到函数中。

$subscriptions = wcs_get_subscriptions(array( 'subscriptions_per_page' => -1,
                'subscription_status' => array('active'), 
                'post_id' => array(123,456,789) ));
foreach($subscriptions as $sub){ 
     echo $sub->get_shipping_city(); 
}

1 个答案:

答案 0 :(得分:0)

简而言之,您无法使用wcs_get_subscriptions函数:

不幸的是,wcs_get_subscriptions函数当前不允许order_id参数使用数组。查看该函数的来源,它仅采用一个数字值(“ 用于创建订阅的shop_order post / WC_Order对象的post ID ”),然后将其用作{在post_parent调用中返回{1}},返回ID列表;然后,在每个数组上运行wcs_get_subscription来创建返回的最终数组。不允许get_posts包含所有参数,这在一定程度上受到限制。

get_posts函数的源可在此处找到:
https://github.com/wp-premium/woocommerce-subscriptions/blob/master/wcs-functions.php

做您需要的替代解决方案:

您可以使用get_posts,将wcs_get_subscriptions使用的其他类似参数与wcs_get_subscriptions参数进行匹配:

  

'post_parent__in'(数组)包含要查询的父页面ID的数组   的子页面。

这是一个例子:

post_parent__in

如果您具有订阅ID,而不是订单ID,则也可以使用/** * Get an array of WooCommerce subscriptions in form of post_id => WC_Subscription. * Basically returns what wcs_get_subcriptions does, but allows supplying * additional arguments to get_posts. * @param array $get_post_args Additional arguments for get_posts function in WordPress * @return array Subscription details in post_id => WC_Subscription form. */ function get_wcs_subscription_posts($get_post_args){ // Find array of post IDs for WooCommerce Subscriptions. $get_post_args = wp_parse_args( $get_post_args, array( 'post_type' => 'shop_subscription', 'post_status' => array('active'), 'posts_per_page' => -1, 'order' => 'DESC', 'fields' => 'ids', 'orderby' => 'date' )); $subscription_post_ids = get_posts( $get_post_args ); // Create array of subscriptions in form of post_id => WC_Subscription $subscriptions = array(); foreach ( $subscription_post_ids as $post_id ) { $subscriptions[ $post_id ] = wcs_get_subscription( $post_id ); } return $subscriptions; } get_wcs_subscription_posts(array( 'post_parent__in' => array(123, 456, 789) )); 。希望有帮助。