如何获取 WooCommerce 中的活跃订阅者列表?

Jon*_*ork 3 php sql wordpress woocommerce woocommerce-subscriptions

我正在尝试获取所有订阅有效用户的列表,但在我的一生中似乎无法获得任何工作。

如果我查看仪表板中的用户,我会看到所有活跃成员都具有“Abonné”角色。

所以我像这样设置了我的短代码:

function custom_get_members( ){
$args1 = array(
        'role' => 'Abonné',
        'orderby' => 'user_nicename',
        'order' => 'ASC'
    );
$subscribers = get_users($args1);

$output = '<ul>';
    foreach ($subscribers as $user) {
        $output .= '<li>' . $user->display_name.'['.$user->user_email . ']</li>';
        }
$output .= '</ul>';

return $output;
}
add_shortcode( 'annuaire', 'custom_get_members' ); 
Run Code Online (Sandbox Code Playgroud)

但是我总是得到 0 结果,即使我们目前有 50 多个订阅者。

以订阅和会员身份运行 WooCommerce。

谢谢!

Loi*_*tec 7

更新 (为您的短代码提供额外的自定义功能)

1) 以下自定义函数可以进行非常轻量级的 SQL 查询,将返回来自所有活动订阅者的一组用户 ID:

function get_active_subscribers_ids(){
    global $wpdb;

    // Return an array of user Ids active subscribers
    return $wpdb->get_col( "
        SELECT DISTINCT pm.meta_value
        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'
    " );
}
Run Code Online (Sandbox Code Playgroud)

代码位于活动子主题(或活动主题)的 function.php 文件中。测试和工作。


2)对于您的简码,我已更改此功能以直接获取display_nameuser_email

function get_all_active_subscribers(){
    global $wpdb;

    return $wpdb->get_results( "
        SELECT DISTINCT u.*
        FROM {$wpdb->prefix}posts as p
        JOIN {$wpdb->prefix}postmeta as pm
            ON p.ID = pm.post_id
        JOIN {$wpdb->prefix}users as u
            ON pm.meta_value = u.ID
        WHERE p.post_type = 'shop_subscription'
        AND p.post_status = 'wc-active'
        AND pm.meta_key = '_customer_user'
    " );
}
Run Code Online (Sandbox Code Playgroud)

代码位于活动子主题(或活动主题)的 function.php 文件中。测试和工作。

在您的短代码中的用法:

function custom_get_members( ){
    $output = '<ul>';

    // Loop through active subscribers
    foreach ( get_all_active_subscribers() as $user ) {
        $output .= '<li>' . $user->display_name.'['.$user->user_email . ']</li>';
    }
    return $output . '</ul>';
}
add_shortcode( 'annuaire', 'custom_get_members' ); 
Run Code Online (Sandbox Code Playgroud)

经过测试并使用更轻的查询和代码。