Подписки WooCommerce — получите информацию об активных подписчиках для отображения в таблице

Я использую подписки Woocommerce и хочу создать таблицу, в которой показаны все активные подписчики с соответствующей информацией о пользователях. Следующий код просто подтягивает всех пользователей... Есть идеи, как это сделать правильно? Спасибо! :)

<table style="border-collapse: collapse;" border="0" width="450" cellspacing="0" cellpadding="0"><colgroup> <col span="5" width="75" /> </colgroup>
<tbody>     
<tr>
<td width="75"><strong>Last Name</strong></td>
<td width="75" height="13"><strong>First Name</strong></td>
<td width="75"><strong>Company</strong></td>
<td width="95"><strong>Phone</strong></td>
<td width="75"><strong>Email</strong></td>
</tr>

<?php
$args = array(
    'post_type'   => 'shop_subscription', // Subscription post type
    'post_status' => 'wc-active', // Active subscription
    'order' => 'ASC',
    'meta_key'  => 'last_name',
    'orderby' => 'meta_value', 
    'numberposts' => -1,

);

// The Query

$user_query = new WP_User_Query( $args );


// User Loop
if ( ! empty( $user_query->results ) ) {
    foreach ( $user_query->results as $user ) {

        echo '
<tr>

<td height="13">' . $user->last_name . '</td> <td>' . $user->first_name . '</td> <td>' . $user->billing_company . '</td><td>' . $user->billing_phone  . '</td> <td>' . $user->user_email  . '</td></tr>' ;
    }
} else {
    echo 'No users found.';
}
?> 


</tbody>
</table>

person Jenna Westbrook    schedule 29.08.2017    source источник


Ответы (1)


Вы можете сделать это с помощью пользовательского SQL-запроса следующим образом (обновлено):

<?php
    global $wpdb;
    $results = $wpdb->get_results( "
        SELECT DISTINCT postmeta.meta_value as user_id, postmeta2.meta_value as first_name, postmeta3.meta_value as last_name,
        postmeta4.meta_value as company, postmeta5.meta_value as phone, postmeta6.meta_value as email
        FROM {$wpdb->prefix}postmeta as postmeta
        INNER JOIN {$wpdb->prefix}posts as posts ON postmeta.post_id = posts.ID
        INNER JOIN {$wpdb->prefix}postmeta as postmeta2 ON postmeta2.post_id = posts.ID
        INNER JOIN {$wpdb->prefix}postmeta as postmeta3 ON postmeta3.post_id = posts.ID
        INNER JOIN {$wpdb->prefix}postmeta as postmeta4 ON postmeta4.post_id = posts.ID
        INNER JOIN {$wpdb->prefix}postmeta as postmeta5 ON postmeta5.post_id = posts.ID
        INNER JOIN {$wpdb->prefix}postmeta as postmeta6 ON postmeta6.post_id = posts.ID
        WHERE posts.post_type LIKE 'shop_subscription'
        AND posts.post_status LIKE 'wc-active'
        AND postmeta.meta_key = '_customer_user'
        AND postmeta2.meta_key = '_billing_first_name'
        AND postmeta3.meta_key = '_billing_last_name'
        AND postmeta4.meta_key = '_billing_company'
        AND postmeta5.meta_key = '_billing_phone'
        AND postmeta6.meta_key = '_billing_email'
        ORDER BY postmeta2.meta_key ASC
    " );
?>
<table style="border-collapse: collapse;" border="0" width="450" cellspacing="0" cellpadding="0">
    <tbody>
        <tr>
            <th height="13"><strong>ID</strong></th>
            <th><strong>Last Name</strong></th>
            <th><strong>First Name</strong></th>
            <th><strong>Company</strong></th>
            <th><strong>Phone</strong></th>
            <th><strong>Email</strong></th>
        </tr>
<?php
foreach ( $results as $result ):
?>
        <tr>
            <td height="13"><?php echo $result->user_id; ?></td>
            <td><?php echo $result->last_name; ?></td>
            <td><?php echo $result->first_name; ?></td>
            <td><?php echo $result->company; ?></td>
            <td><?php echo $result->phone; ?></td>
            <td><?php echo $result->email; ?></td>
        </tr>
<?php
endforeach;
?>
    </tbody>
</table>

Код находится в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

проверено и работает. Вы получите что-то вроде этого:

введите здесь описание изображения

person LoicTheAztec    schedule 29.08.2017
comment
Потрясающий! Спасибо!! Я внес пару изменений, так как фамилия подтягивалась в столбце имени, и мне нужна была таблица, организованная в алфавитном порядке по фамилии. Я опубликую обновленный код ниже. - person Jenna Westbrook; 29.08.2017
comment
Извините, @LoicTheAztec, я новичок и не был уверен в правильном протоколе! Спасибо за ваш потрясающий ответ! - person Jenna Westbrook; 30.08.2017