Obtenga la ID de usuario en las suscripciones de WooCommerce

3 minutos de lectura

avatar de usuario
usuario3072613

Estoy usando el complemento WooCommerce Subscriptions y estoy tratando de obtener el cliente o ID de usuario de un wc_subscription determinado.

Aquí está el código que he estado usando pero falla:

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);
...
}

Pensé $wc_subscription->customer_user tendrá el ID de usuario pero está vacío. De hecho, evita que el código continúe.

¿Cómo puedo obtener la identificación de usuario con $wc_subscription?

avatar de usuario
LoicTheAztec

como clase WC_Métodos de suscripción son heredados de WC_Abstract_Order y WC_Order clases, puedes usar get_user_id() método de esta manera:

$userid = $wc_subscription->get_user_id();

Este código está probado y funciona con el objeto de instancia WC_Subscription

Entonces tu código será:

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

Actualizar (sobre el comentario de OP)

como el argumento $wc_subscription era el ID de suscripción (y no el objeto Suscripción).

Así que he cambiado el código a:

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

    // ...
}

  • Hola. Gracias por la respuesta. Podría editarlo y reemplazar mi correo electrónico con: [email protected] Cometí un error al no reemplazarlo. $wc_subscription es en realidad una identificación. No es el objeto de suscripción de WC real. Entonces, usar esto en la parte superior corrige $wc_subscription = wcs_get_subscription($wc_subscriptionid);

    – usuario3072613

    30 de marzo de 2017 a las 6:20


  • @ user3072613 Actualicé mi respuesta reemplazando la dirección de correo electrónico y cambiando el código. Por favor, eche un vistazo, debería ser correcto ahora, según su comentario.

    – LoicTheAztec

    30 de marzo de 2017 a las 7:28

WC_Subscription es una versión ampliada de WC_ORDER, por lo que puede usar las mismas llamadas que WC_ORDER.

Tu código modificado:

 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;
    }

  • a veces la suscripción se puede hacer con un correo electrónico mientras que la cuenta se crea con otro correo electrónico. En este caso, get_user_by devolverá un valor nulo (acabo de corregir un error similar). Entonces, la solución es obtener user_id con $wc_subscription->get_user_id();

    – Crerem

    29 de diciembre de 2021 a las 10:32

Recupere el objeto de usuario actual (WP_User). Contenedor de get_currentuserinfo() usando la variable global $current_user.

wp_get_current_user();

Pero puede estar en desuso por lo que puede derivar de

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

  • No respondiste la pregunta. wp_get_current_user(), devuelve el usuario conectado actual, lo que está buscando es el usuario en suscripción

    – Karue Benson Karue

    25 de febrero de 2021 a las 5:58

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad