如何获取与Woocommerce订阅相关联的帖子ID

时间:2016-06-08 19:23:21

标签: wordpress woocommerce

我正在拼命尝试以编程方式获取与WooCommerce订阅对象关联的帖子ID。我从用户ID开始,并尝试使用get_posts函数请求数据库。使用get_users_subscriptions的通话有效,但返回的对象不包含ID,只包含关联的order_idproduct_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请求遗憾地返回一个空数组。你在我的请求中看到了什么问题吗?

提前致谢,

2 个答案:

答案 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,
    ]);
  }
);