Подскажите как вывести 5 последних зарегистрированных пользователей в Wordpress

Пожалуйста, подскажите как вывести 5 последних зарегистрированных пользователей в блоке на странице. Мне необходимо чтобы выводился список в формате ul > li в кадлом отдельном li была ссылка на профиль этого пользователя в ней указаны get_avatar( $q->ID, 80 ) который выводит аватар пользователя и user_lastname (фамилия), user_firstname (имя), surname (отчество) вот такая конструкция. Я уже 3 дня не могу сообразить, опыт маленький к сожалению. Я нашел почему то только 1 пример в интернете но я не могу его переделать под себя. не выводится там user_lastname, user_firstname, surname пример который я нашел прикрепляю, может он кому и пригодится:

function recently_registered_users() {
    global $wpdb;
    $recentusers = '<ul class="recently-user">';
    $usernames = $wpdb->get_results( "SELECT * FROM $wpdb->users ORDER BY ID DESC LIMIT 5" );
 
    foreach ( $usernames as $username ) {
        if ( !$username->user_url ) :
            $recentusers .= '<li>' .get_avatar( $username->user_email, 80 ) .$username->user_nicename."</a></li>";
        else :
            $recentusers .= '<li>' .get_avatar( $username->user_email, 80 ).'<a href="'.$username->user_url.'">'.$username->user_nicename."</a></li>";
        endif;
    }
    
    $recentusers .= '</ul>';
    return $recentusers; 
}
add_shortcode( 'block_new_users', 'recently_registered_users' );

Сейчас смог из г**на и палок собрать вот такой код но почему то он не показывает фио как планировалось, можете подсказать что не правильно делаю

<?php
        
$number = 5; 
$paged = (get_query_var('paged')) ? get_query_var('paged') : 0;
$users = get_users();
$query = get_users('&offset='.$offset.'&number='.$number);
$total_users = count($users);

echo '<ul id="sz-users_ul" class="clearfix">';

foreach($query as $q) { ?>

<li class="sz-users_li clearfix">
<div class="sz-user-avatar">
<?php echo get_avatar( $q->ID, 80 ); ?> 
</div>
<div class="sz-user-data">

<h4 class="sz-user-name">
<a href="<?php echo get_author_posts_url($q->ID);?>">
<?php echo get_the_author_meta('user_lastname', $q->ID);?> <?php echo get_the_author_meta('user_firstname', $q->ID);?> <?php echo get_the_author_meta('surname', $q->ID);?>
</a>
</h4>

<?php if (get_the_author_meta('service', $q->ID) != '') : ?>
<p><?php echo get_the_author_meta('service', $q->ID); ?></p>
<?php endif; ?>

</div>
</li>

<?php } 

echo '</ul>';

?>


Ответы (2 шт):

Автор решения: SKarmanoff

Вот что у меня получилось вдруг кому то пригодится. Код позволяет создать шорт код для вывода пяти последних зарегистрированых пользователей. Но дело в том что так и не получилось вывести место ника пользователя его ФИО . это для меня проблема но кому то может пригодится и так

 /**
 * Создает виджет со списком новых пользователей
 * он размещается где необходимо по шорткоду [block_new_users]
 */
function recently_registered_users() {
    global $wpdb;
    $recentusers = '<ul class="recently-user">';
    $usernames = $wpdb->get_results( "SELECT * FROM $wpdb->users ORDER BY ID DESC LIMIT 5" );
 
    foreach ( $usernames as $username ) {
        if ( !$username->user_nicename ) :
            $recentusers .= '<li><a href="/author/'.$username->user_nicename.'">' .get_avatar( $username->user_email, 80 ) .$username->user_nicename."</a></li>";
        else :
            $recentusers .= '<li><a href="/author/'.$username->user_nicename.'">' .get_avatar( $username->user_email, 80 ) .$username->user_nicename."</a></li>";
        endif;
    }
    
    $recentusers .= '</ul>';
    return $recentusers; 
}
add_shortcode( 'block_new_users', 'recently_registered_users' );

→ Ссылка
Автор решения: Simon

Давайте разберемся в Вашем коде с get_users(), как Вам и сказали, вариант с $wpdb в Вашем случае не лучший, так как Вы не совсем понимаете что конкретно нужно делать и как было сказано, это обычно крайний вариант.

Код может иметь такой вид:

<?php
$users = get_users([
    'number'  => 5,
    'orderby' => 'registered',
    'order'   => 'DESC'
]);

if (!empty($users)) : ?>
    <ul id="sz-users_ul" class="clearfix">
        <?php foreach($users as $user) : ?>
            <li class="sz-users_li clearfix">
                <div class="sz-user-avatar">
                    <?php echo get_avatar($user->ID, 80); ?>
                </div>
                <div class="sz-user-data">
                    <h4 class="sz-user-name">
                        <a href="<?php echo get_author_posts_url($user->ID);?>">
                        <?php echo get_the_author_meta('user_lastname', $user->ID); ?> <?php echo get_the_author_meta('user_firstname', $user->ID); ?>
                        </a>
                    </h4>
                </div>
            </li>
        <?php endforeach; ?>
    </ul>
<?php endif; ?>

Вы можете использовать 'orderby' => 'registered' как указано в документации. Обратите внимание, что я убрал поля surname и service так как по умолчанию, таких полей нет, список полей которые можно использовать можно прочесть здесь. Если подскажете что это за поля и каким образом Вы их добавили в профиль, я смогу подсказать как их можно получить. Предположу что это мета поля, получить их можно используя get_user_meta(), например get_user_meta($user_id, 'service', true);.

→ Ссылка