#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
идентификатором подписки, к которой вы хотели бы привязать заказ.