我正在尝试获取所有具有有效订阅的用户的列表,但是对我而言,似乎无法正常工作。
如果我查看仪表板中的用户,我会看到所有活动成员都具有“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' );
但是即使我们目前有50多个订阅者,我也总是得到0个结果。
通过订阅和会员身份运行WooCommerce。
谢谢!
答案 0 :(得分:3)
已更新 (为您的短代码提供了其他自定义功能)
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'
" );
}
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。
2)对于您的简码,我已更改此函数以直接获取display_name
和user_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'
" );
}
代码进入您的活动子主题(或活动主题)的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' );
经过测试,可以使用更轻松的查询和代码。