Как получить список активных подписчиков в WooCommerce? - PullRequest
2 голосов
/ 08 апреля 2019

Я пытаюсь получить список всех пользователей с активными подписками, но, судя по всему, у меня не получается заставить работать что-то.

Если я посмотрю на пользователей в панели управления, то у всех активных участников будет роль "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' ); 

Но я всегда получаю 0 результатов, хотя в настоящее время у нас более 50 подписчиков.

Запуск WooCommerce с подпиской и членством.

Спасибо!

1 Ответ

3 голосов
/ 08 апреля 2019

Обновлено (с дополнительной настраиваемой функцией для вашего шорткода)

1) Следующая пользовательская функция, которая делает очень легкий запрос SQL, вернет массивИдентификаторы пользователей от всех активных подписчиков:

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'
    " );
}

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

Протестировано и работает с более легким запросом и кодом.

...