Cómo obtener el estado de una subscripción de Woocommerce Subscriptions

Cómo obtener el estado de una subscripción de Woocommerce Subscriptions

La forma de obtener el estado de una subscripción es mediante una función personalizada que hace una consulta a la base de datos de WordPress y se hace de la siguiente manera:

function get_subscription_status(){
    
    global $wpdb;
    $user_id   = get_current_user_id();
    // Get all active subscriptions count for a user ID
    $count_subscriptions = $wpdb->get_var( "
        SELECT count(p.ID)
        FROM {$wpdb->prefix}posts as p
        JOIN {$wpdb->prefix}postmeta as pm 
            ON p.ID = pm.post_id
        WHERE p.post_type = 'shop_subscription' 
        AND p.post_status = 'wc-active'
        AND pm.meta_key = '_customer_user' 
        AND pm.meta_value > 0
        AND pm.meta_value = '$user_id'
    " );

     return $count_subscriptions == 0 ? true : false;  
     
}

Esta función hará una consulta en la base de datos buscando en el estado del post el key «wc-active» y el usuario actual. devuelve un valor boleano.

Podemos hacer que reciba el usuario por parámetro de la siguiente manera:

function get_subscription_status($user_id){
    
    global $wpdb;
    // Get all active subscriptions count for a user ID
    $count_subscriptions = $wpdb->get_var( "
        SELECT count(p.ID)
        FROM {$wpdb->prefix}posts as p
        JOIN {$wpdb->prefix}postmeta as pm 
            ON p.ID = pm.post_id
        WHERE p.post_type = 'shop_subscription' 
        AND p.post_status = 'wc-active'
        AND pm.meta_key = '_customer_user' 
        AND pm.meta_value > 0
        AND pm.meta_value = '$user_id'
    " );

     return $count_subscriptions == 0 ? true : false;  
     
}

O podemos hacer que devuelva un string a través de un shortcode de la siguiente forma:

function get_subscription_status($user_id){
    
    global $wpdb;
    // Get all active subscriptions count for a user ID
    $count_subscriptions = $wpdb->get_var( "
        SELECT count(p.ID)
        FROM {$wpdb->prefix}posts as p
        JOIN {$wpdb->prefix}postmeta as pm 
            ON p.ID = pm.post_id
        WHERE p.post_type = 'shop_subscription' 
        AND p.post_status = 'wc-active'
        AND pm.meta_key = '_customer_user' 
        AND pm.meta_value > 0
        AND pm.meta_value = '$user_id'
    " );

     return $count_subscriptions == 0 ? "Activo" : "Inactivo";  
     
}

add_shortcode("get_subscription_status","get_subscription_status");

Estos son ejemplos de uso de la función. Puedes modificarla según tus necesidades.

Compartir esta información