【问题标题】:Woocommerce Subscription get id from order id with APIWoocommerce Subscription 使用 API 从订单 id 获取 id
【发布时间】:2021-07-19 02:16:31
【问题描述】:

是否可以通过 WooCommerce 的 API 从 Woocommerce 订单 ID 中获取订阅 ID? 我正在使用 PHP,通过它我可以获取所有订单数据,但不能获取订阅 ID:

$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => "https://www.example.com/wp-json/wc/v3/orders/".$orderId,
    CURLOPT_USERPWD => 'code:code',
    CURLOPT_HTTPHEADER => array(
         "accept: application/json"
    )
]);
$woocommerceOrder = curl_exec($curl);

【问题讨论】:

  • 你试过类似的 API 端点 www.example.com/wp-json/wc/v3/subscriptions
  • 是的,但我需要该端点的订阅 ID...但我需要先从我拥有的 woocommerce 订单 ID 中获取订阅 ID

标签: php wordpress woocommerce wordpress-rest-api woocommerce-subscriptions


【解决方案1】:

我已经在 Wordpress 中的 functions.php 文件中解决了这段代码:

function prefix_wc_rest_prepare_order_object($response, $object, $request){
    // Get the subscription id
    $subscriptions_ids = wcs_get_subscriptions_for_order($object->get_id(), array('order_type' => 'any'));
    // We get all related subscriptions for this order
    foreach($subscriptions_ids as $subscription_id => $subscription_obj){
        if($subscription_obj->order->id == $object->get_id()){
            break; // Stop the loop
        }
    }
    $response->data['subscription_id'] = $subscription_id;
    return $response;
}
add_filter('woocommerce_rest_prepare_shop_order_object', 'prefix_wc_rest_prepare_order_object', 10, 3);

感谢 mujuonly 提供参考和最初的 sn-p。

【讨论】:

    【解决方案2】:
    add_filter( 'woocommerce_api_order_response', 'add_woo_field_order_api_response', 20, 4 );
    
    function add_woo_field_order_api_response( $order_data, $order, $fields, $server ) {
    
        // Get the subscription id
        $subscriptions_ids  = wcs_get_subscriptions_for_order( $order->get_id(), array( 'order_type' => 'any' ) );
        // We get all related subscriptions for this order
        foreach ( $subscriptions_ids as $subscription_id => $subscription_obj )
            if ( $subscription_obj->order->id == $order_id )
                break; // Stop the loop
        $order_data[ 'subscription_id' ] = $subscription_id;
        return $order_data;
    }
    

    在您的服务器活动主题function.php 中添加此代码sn-p。然后订单 API 响应将包含订阅 ID

    【讨论】:

    • 我已经尝试过这段代码,但在example.com/wp-json/wc/v3/orders/".$orderId endopoint 我没有看到任何元素subscription_id
    • @DamianoFontana 检查代码是否在请求被触发时被执行。
    • 我尝试添加一个测试参数,但在端点响应中看不到它... function add_woo_field_order_api_response( $order_data, $order, $fields, $server ) { $order_data ['test-parameter'] = "测试测试测试";
    • 我应该使用 prefix_wc_rest_prepare_order_object 代替 add_woo_field_order_api_response 吗?
    猜你喜欢
    • 1970-01-01
    • 2017-07-08
    • 2017-09-25
    • 2020-05-08
    • 2017-08-26
    • 2019-09-08
    • 2014-03-05
    • 2021-07-14
    • 2017-07-02
    相关资源
    最近更新 更多