Свяжите стандартные заказы Woocommerce с подписками на Woocommerce

#php #wordpress #woocommerce

Вопрос:

У нас была устаревшая система, которая использовала подписку Woocommerce, но не подписку Woocommerce, с тех пор мы перешли на подписку Woocommerce, но у нас есть тонна стандартных заказов Woo, которые мы хотели бы привязать к подпискам.

Через базу данных, если я найду подписку в таблице postmeta, я могу вручную изменить _subscription_renewal_order_ids_cache , чтобы включить идентификатор заказа, чтобы он стал следующим:

 a:2:{
  i:0;i:143052;
  i:1;i:143049;
}
 

(Я добавил вторую строку)

В самом заказе, если я добавлю мета _subscription_renewal -код с идентификатором подписки, который затем свяжет заказ с подпиской.

Можно ли это сделать программно? Я сделал следующее, но это не выводит мету (поэтому я не могу ее изменить).

 global $wpdb;

// get all subscriptions IDS
$subscriptions_ids = $wpdb->get_col("
    SELECT ID  FROM {$wpdb->prefix}posts
    WHERE post_type LIKE 'shop_subscription'
");

// Loop through subscriptions Ids
foreach( $subscriptions_ids as $subscription ){
    // Get an instance of the WC_Subscription object
    $subscription = new WC_Subscription( $subscription );

        $subscription_id = $subscription->get_id();
        $subscription_email = $subscription->get_billing_email();

        echo $subscription->get_meta('_subscription_renewal_order_ids_cache');

        echo "<pre>";
        print_r( $subscription );
        echo "</pre>";
}
 

Я не продвинулся дальше с кодом, пока не смогу вывести и изменить мету сообщения.

Ответ №1:

Это можно сделать, просмотрев заказы и добавив мета — строку:

 $order = wc_get_order();
$order->update_meta_data( '_subscription_renewal', $subscription_id );
$order->save();
 

С $subscription_id идентификатором подписки, к которой вы хотели бы привязать заказ.