Получить идентификатор пользователя в подписках WoooCommerce

Я использую плагин WoooCommerce Subscription и пытаюсь получить клиента или идентификатор пользователя для данной wc_subscription.

Вот код, который я использовал, но не работает:

add_action( 'woocommerce_scheduled_subscription_trial_end', 'registration_trial_expired', 100 );
function registration_trial_expired( $wc_subscription ) {
mail("[email protected]", "Expired", "Someone's order has expired");
$userid = $wc_subscription->customer_user;
mail("[email protected]", "Expired", "Someone's order has expired with customer".$userid);
...
}

я думал $wc_subscription->customer_user будет иметь идентификатор пользователя, но он пуст. Фактически останавливает продолжение кода.

Как я могу получить идентификатор пользователя с $wc_subscription?

Спасибо

1

Решение

Как класс Методы WC_Subscription наследуются от WC_Abstract_Order а также WC_Order классы, вы можете использовать get_user_id() метод так:

$userid = $wc_subscription->get_user_id();

Этот код протестирован и работает с объектом экземпляра WC_Subscription

Итак, ваш код будет:

add_action( 'woocommerce_scheduled_subscription_trial_end', 'registration_trial_expired', 100 );
function registration_trial_expired( $wc_subscription ) {
mail("[email protected]", "Expired", "Someone's order has expired");
$userid = $wc_subscription->get_user_id(); // <= HERE
mail("[email protected]", "Expired", "Someone's order has expired with customer".$userid);
// ...
}

Обновить (на комментарии ОП)

В качестве аргумента $wc_subscription был идентификатор подписки (а не объект подписки).

Поэтому я изменил код на:

add_action( 'woocommerce_scheduled_subscription_trial_end', 'registration_trial_expired', 100 );
function registration_trial_expired( $subscription_id ) {

// Get an occurrence of the WC_Subscription object
$subscription = wcs_get_subscription( $subscription_id );

// Get the user ID (or customer ID)
$user_id = $subscription->get_user_id();

// The email adress
$email = '[email protected]';

// The theme domain (replace with your theme domain for localisable strings)
$domain = 'woocommerce';

mail( $email, 'Expired', __("Someone’s order has expired", $domain);
mail( $email, 'Expired', __("Someone’s order has expired with customer", $domain) . $user_id );

// ...
}
1

Другие решения

Получить текущий объект пользователя (WP_User).
Оболочка get_currentuserinfo () с использованием глобальной переменной $ current_user.

wp_get_current_user();

Но это может быть устаревшим, так что вы можете получить из

$userdata = WP_User::get_data_by( $field, $value );
0

По вопросам рекламы [email protected]