RINCODE
@RINCODE
Я новичок, еще учусь

Добрый день, где храняться в базе данных информация о подписках в woocomerce subscription?

Дело в том, что в документации указано
данные о подписках будут храниться в таблице shop_subscription (или wp_shop_subscription, в зависимости от префикса таблиц в вашей базе данных).

Но у меня да же нет таблиц с subscription
64b971af7cc8b564436957.png

Мне нужно подключиться к бд и получать данные на прямую из базы данных, но найти где лежат пользователи и подписки пользователей я не могу, буду рад помощи, спасибо.

Woocomerce 7.9.0
woocomerce subscription 5.2.0
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
Woocommerce Subscription работает с объектами класса WC_Subscription (не только с ним, но это базовый класс, глубже копать вам не нужно), который наследуется от WC_Order:

class WC_Subscription extends WC_Order {...}

соответственно, данные хранятся в таблицах woocommerce.

Напрямую через запросы к таблицам вы работать с подписками конечно можете, но это как-бы не очень хорошая идея. Чтобы получить данные подписок пользователя вам достаточно вызвать функцию wcs_get_users_subscriptions($user_id) и передать в неё id пользователя. Перед этим, желательно проверить, а есть ли у пользователя вообще подписки - wcs_user_has_subscription($user_id).

Пример:

// каким-то образом получаете id пользователя
$user_id = get_current_user_id();

// далее проверяете, есть ли у пользователя подписки
if (wcs_user_has_subscription($user_id)) {
        // получаете массив объектов WC_Subscription
        $users_subscriptions =  wcs_get_users_subscriptions($user_id);
// далее, вытаскиваете из объектов всё, что вам нужно. Здесь я привёл лишь некоторые данные из возможных. На самом деле их там гораздо больше. Версия WC Subscription 5.6.0.
        $result = array_map(
            function($subscription) {
                return [
                    'id'                    => $subscription->get_id(),
                    'version'               => $subscription->get_version(),
                    'customer_id'           => $subscription->get_customer_id(),
                    'status'                => $subscription->get_status(),
                    'currency'              => $subscription->get_currency(),
                    'date_created'          => $subscription->get_date( 'date_created' ),
                    'next_payment'          => $subscription->get_date( 'next_payment' ),
                    'date_end'              => $subscription->get_date( 'end' ),
                    'date_trial_end'        => $subscription->get_date( 'trial_end' ),
                    'payment_method'        => $subscription->get_payment_method_title(),
                    'total'                 => $subscription->get_total(),
                    'discount_total'        => $subscription->get_discount_total(),
                    'shipping_total'        => $subscription->get_shipping_total()
                ];
            },
            $users_subscriptions
        );
        
        echo '<pre>';
        print_r($result);
        echo '</pre>';
    }


Для получения данных профиля пользователя вам вполне достаточно функции get_user_by('ID', $user_id).
Для получения ссылки на аватар - get_avatar_url($user_id)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы