WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Фильтр пользователей по количеству комментариев

Не получается сделать фильтр по комментариям, чтобы отображались пользователи по количеству комментариев

вывожу так

  <?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>';
				}
				?>
Заметки к вопросу:
stepan 2.4 года назад

уточните вопрос... чтоб сортировка пользователей была по количеству комментов?
чтоб первыми шли те, у кого наибольше комментов?

pfilan 2.4 года назад

да. не могу не как сделать sad

pfilan 2.4 года назад

не получается sad

0
pfilan
2.4 года назад 24
  • 1
    stepan2278 www.weblancer.net/users/stepanko/?affili...

    Нужно читать, разобраться и написать код для себя:
    https://wordpress.stackexchange.com/questions/195155/get-most-active-users-sort-by-comment-count
    Стандартного метода сортировки нет, а вернее - по умолч, из коробки - такое не работает.

    pfilan 2.4 года назад

    спасибо буду разбиваться.

    Комментировать
  • 1
    Kama9616

    В данных юзеров нет информации о том кто сколько оставил комментариев. Поэтому тебе нужно делать отдельный запрос на подсчет комментариев пользователей, и только потом выводить пользователей. Или можно при публикации комментария добавлять +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

    pfilan 2.4 года назад

    спасибо буду разбиваться.

    pfilan 2.4 года назад

    Кстати код выводит лишних не опознанных пользователей

    Kama 2.4 года назад

    Как это неопознаных? Удаленные что ли? В цикле проверяй если юзера нет, то ничего не делаей или делай что-то другое.

    pfilan 2.4 года назад

    2 снизу

    pfilan 2.4 года назад

    есть еще

    Kama 2.4 года назад

    У этих пользователей просто нет display_name, попробуй заменить

    $user->display_name
    
    // на
    
    ( $user->display_name ?: $user->login )
    pfilan 2.4 года назад

    да получилось. спасибо.
    а как автора связать ? а то не пашет теперь

    echo '<a class="crug" href="/?author=' . $author->ID . '">' . '<span data-tooltip="Статей"><i class="fa fa-eercast"></i> ' . count_user_posts($author->ID) . '</span></a>';
    pfilan 2.4 года назад

    Все ровно выдает не опознаны объекты

    <?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>';
    
    ?>
    pfilan 2.4 года назад

    pfilan 2.4 года назад

    пробую выдать чтобы все работало но фильтр не делается sad

      <?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>';
    				}
    				?>
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация