在 WooCommerce 订阅中获取用户 ID

Posted

技术标签:

【中文标题】在 WooCommerce 订阅中获取用户 ID【英文标题】:Get the user ID in WooCommerce Subscriptions 【发布时间】:2017-08-23 19:45:18 【问题描述】:

我正在使用 WooCommerce 订阅插件,我正在尝试获取给定 wc_subscription 的客户或用户 ID。

这是我一直在使用但失败的代码:

add_action( 'woocommerce_scheduled_subscription_trial_end', 'registration_trial_expired', 100 );
function registration_trial_expired( $wc_subscription ) 
    mail("example@gmail.com", "Expired", "Someone's order has expired");
    $userid = $wc_subscription->customer_user;
    mail("example@gmail.com", "Expired", "Someone's order has expired with customer".$userid);
...

我以为$wc_subscription->customer_user 会有用户标识,但它是空的。实际上阻​​止了代码继续。

如何获取$wc_subscription 的用户ID?

【问题讨论】:

【参考方案1】:

由于WC_Subscription methods类继承自WC_Abstract_OrderWC_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("example@gmail.com", "Expired", "Someone's order has expired");
    $userid = $wc_subscription->get_user_id(); // <= HERE
    mail("example@gmail.com", "Expired", "Someone's order has expired with customer".$userid);
    // ...


更新 (根据 OP 的评论)

$wc_subscription 的参数是订阅 ID (而不是订阅对象)

所以我把代码改成了:

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 = 'example@gmail.com';

    // 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 );

    // ...

【讨论】:

嗨。感谢您的回答。请编辑它并将我的电子邮件替换为:example@gmail.com 我犯了一个错误,没有替换它。 $wc_subscription 实际上是一个 id。不是实际的 WC Subscription 对象。所以在最顶层使用这个修复 $wc_subscription = wcs_get_subscription($wc_subscriptionid); @user3072613 我已经更新了我的答案,替换了电子邮件地址并更改了代码。请看一下,根据您的评论,现在应该是正确的。【参考方案2】:

WC_Subscription 是WC_ORDER 的扩展版本,因此您可以使用与WC_ORDER 相同的调用。

您的代码已调整:

 add_action( 'woocommerce_scheduled_subscription_trial_end', 'registration_trial_expired', 100 );
 function registration_trial_expired( $wc_subscription ) 
    
    $order_billing_email = $wc_subscription->get_billing_email(); 
    $User      = get_user_by( 'email', $order_billing_email );             /
    $FirstName = $User->first_name;
    $LastName  = $User->last_name;
    $UserId    = $User->ID;
    

【讨论】:

有时可以使用电子邮件进行订阅,而使用另一电子邮件创建帐户。在这种情况下, get_user_by 将返回 null (我刚刚修复了一个类似的错误)。所以解决方法是用 $wc_subscription->get_user_id(); 获取 user_id;【参考方案3】:

检索当前用户对象(WP_User)。 使用全局变量 $current_user 封装 get_currentuserinfo()。

wp_get_current_user();

但它可能已被弃用,因此您可以从

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

【讨论】:

您没有回答问题。 wp_get_current_user(),返回当前登录的用户,他要找的是订阅中的用户

以上是关于在 WooCommerce 订阅中获取用户 ID的主要内容,如果未能解决你的问题,请参考以下文章

WooCommerce 订阅 - 获取特定订阅的相关订单 ID

sql 在WooCommerce订阅中选择有效订阅用户

如何获取 woocommerce 订阅列表?

以编程方式更新 WooCommerce 订阅订单行项目

从逗号分隔的订单ID中获取有效的WooCommerce订阅

如何显示用户的 WooCommerce 订阅详情?