获取 WooCommerce 订阅中的用户 ID

use*_*613 6 php wordpress subscription woocommerce woocommerce-subscriptions

我正在使用 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);
...
}
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能获得用户ID $wc_subscription

Loi*_*tec 7

\n

由于类WC_Subscription 方法是从WC_Abstract_OrderWC_Order类继承的,因此您可以get_user_id()这样使用方法:

\n
$userid = $wc_subscription->get_user_id();\n
Run Code Online (Sandbox Code Playgroud)\n
\n

此代码经过测试并可与 WC_Subscription 实例对象一起使用

\n

所以你的代码将是:

\n
add_action( \'woocommerce_scheduled_subscription_trial_end\', \'registration_trial_expired\', 100 );\nfunction registration_trial_expired( $wc_subscription ) {\n    mail("example@gmail.com", "Expired", "Someone\'s order has expired");\n    $userid = $wc_subscription->get_user_id(); // <= HERE\n    mail("example@gmail.com", "Expired", "Someone\'s order has expired with customer".$userid);\n    // ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n
\n
\n

更新 (关于OP的评论)

\n
\n

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

\n

所以我将代码更改为:

\n
add_action( \'woocommerce_scheduled_subscription_trial_end\', \'registration_trial_expired\', 100 );\nfunction registration_trial_expired( $subscription_id ) {\n\n    // Get an occurrence of the WC_Subscription object\n    $subscription = wcs_get_subscription( $subscription_id );\n    \n    // Get the user ID (or customer ID)\n    $user_id = $subscription->get_user_id();\n\n    // The email adress\n    $email = \'example@gmail.com\';\n\n    // The theme domain (replace with your theme domain for localisable strings)\n    $domain = \'woocommerce\';\n    \n    mail( $email, \'Expired\', __("Someone\xe2\x80\x99s order has expired", $domain);\n    mail( $email, \'Expired\', __("Someone\xe2\x80\x99s order has expired with customer", $domain) . $user_id );\n\n    // ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n


小智 1

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

wp_get_current_user();
Run Code Online (Sandbox Code Playgroud)

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

$userdata = WP_User::get_data_by( $field, $value );
Run Code Online (Sandbox Code Playgroud)