Фильтр пользователей по количеству комментариев
Не получается сделать фильтр по комментариям, чтобы отображались пользователи по количеству комментариев
вывожу так
<?php
global $wpdb;
$sql = "SELECT user_id, COUNT( * ) AS total
FROM $wpdb->comments
WHERE comment_approved = 1 AND user_id != 0
GROUP BY user_id
ORDER BY total DESC";
$comment_counts = $wpdb->get_results( $sql );
$user_query = new WP_User_Query( array( '' => '' ));
if ( ! empty( $user_query->results ) ) { foreach ( $user_query->results as $author ) {
$args = array( 'user_id' => $author->ID, 'count' => true, 'status' => 'approve', );
$commratings = get_comments( $args );
$user = get_userdata( $count->user_id );
if ( ! $commratings ) { continue; // пропускаем пользователя, в которого нет комментов
}
echo "<li class='spisok-users'>";
echo '<br/><a href="/author/?uid=' . $author->ID . '">' . get_avatar( $author->ID ) . '<p></p><span class="color-pf-green">' . get_the_author_meta( 'display_name', $author->ID ) . '</span></a><br/><br/>';
echo '<a class="crug" href="/?author=' . $author->ID . '">' . '<span data-tooltip="Статей"><i class="fa fa-eercast"></i> ' . count_user_posts($author->ID) . '</span></a>';
echo ' <span class="crug" data-tooltip="Сообщений"> <i class="fa fa-comments-o"></i> ' . $commratings . '</span><br/><br/>';
echo '</li>';
}
}
else {
echo '<ol><pre>Пользователи не найдены</pre></ol>';
}
?>уточните вопрос... чтоб сортировка пользователей была по количеству комментов?
чтоб первыми шли те, у кого наибольше комментов?
да. не могу не как сделать 
не получается 
Нужно читать, разобраться и написать код для себя:
https://wordpress.stackexchange.com/questions/195155/get-most-active-users-sort-by-comment-count
Стандартного метода сортировки нет, а вернее - по умолч, из коробки - такое не работает.
спасибо буду разбиваться.
В данных юзеров нет информации о том кто сколько оставил комментариев. Поэтому тебе нужно делать отдельный запрос на подсчет комментариев пользователей, и только потом выводить пользователей. Или можно при публикации комментария добавлять +1 в метаполе юзеру, и делать выборку по этому метаполю.
П.С. Для выборки пользователей используй get_users().
Вот нашел решение в наших интернетах:
global $wpdb; $sql = "SELECT user_id, COUNT( * ) AS total FROM $wpdb->comments WHERE comment_approved = 1 AND user_id != 0 GROUP BY user_id ORDER BY total DESC"; $comment_counts = $wpdb->get_results( $sql ); echo '<ul>'; foreach( $comment_counts as $count ){ $user = get_userdata( $count->user_id ); echo "<li>"; echo get_avatar( $user->ID ) . "<a href='" . get_author_posts_url( $user->ID ) . "'>" . $user->display_name . "</a>"; echo "<p> Numero di commenti: " . $count->total . "</p>"; echo "</li>"; } echo '</ul>';От сюда: https://wordpress.stackexchange.com/questions/195155/get-most-active-users-sort-by-comment-count
спасибо буду разбиваться.
Кстати код выводит лишних не опознанных пользователей
Как это неопознаных? Удаленные что ли? В цикле проверяй если юзера нет, то ничего не делаей или делай что-то другое.
2 снизу
есть еще
У этих пользователей просто нет
display_name, попробуй заменитьда получилось. спасибо.
а как автора связать ? а то не пашет теперь
Все ровно выдает не опознаны объекты
<?php global $wpdb; $sql = "SELECT user_id, COUNT( * ) AS total FROM $wpdb->comments WHERE comment_approved = 1 AND user_id != 0 GROUP BY user_id ORDER BY total DESC"; $comment_counts = $wpdb->get_results( $sql ); echo '<ul>'; foreach( $comment_counts as $count ){ $user = get_userdata( $count->user_id ); echo "<li class='spisok-users'>"; echo '<br/><a href="/author/?uid=' . $user->ID . '">' . get_avatar( $user->ID ) . '<p></p><span class="color-pf-green">' . ( $user->display_name ?: $user->login ) . '</span></a><br/><br/>'; echo '<a class="crug" href="/?author=' . $author->ID . '">' . '<span data-tooltip="Статей"><i class="fa fa-eercast"></i> ' . count_user_posts($author->ID) . '</span></a>'; echo ' <span class="crug" data-tooltip="Сообщений"> <i class="fa fa-comments-o"></i> ' . $count->total . '</span><br/><br/>'; echo "</li>"; } echo '</ul>'; ?>пробую выдать чтобы все работало но фильтр не делается
<?php global $wpdb; $sql = "SELECT user_id, COUNT( * ) AS total FROM $wpdb->comments WHERE comment_approved = 1 AND user_id != 0 GROUP BY user_id ORDER BY total DESC"; $comment_counts = $wpdb->get_results( $sql ); $user_query = new WP_User_Query( array( '' => '' )); if ( ! empty( $user_query->results ) ) { foreach ( $user_query->results as $author ) { $args = array( 'user_id' => $author->ID, 'count' => true, 'status' => 'approve', ); $commratings = get_comments( $args ); foreach( $comment_counts as $count ); $user = get_userdata( $count->user_id ); if ( ! $commratings ) { continue; // пропускаем пользователя, в которого нет комментов } echo "<li class='spisok-users'>"; echo '<br/><a href="/author/?uid=' . $author->ID . '">' . get_avatar( $author->ID ) . '<p></p><span class="color-pf-green">' . get_the_author_meta( 'display_name', $author->ID ) . '</span></a><br/><br/>'; echo '<a class="crug" href="/?author=' . $author->ID . '">' . '<span data-tooltip="Статей"><i class="fa fa-eercast"></i> ' . count_user_posts($author->ID) . '</span></a>'; echo ' <span class="crug" data-tooltip="Сообщений"> <i class="fa fa-comments-o"></i> ' . $commratings . '</span><br/><br/>'; echo '</li>'; } } else { echo '<ol><pre>Пользователи не найдены</pre></ol>'; } ?>