WordPress как на ладони

Сортируемая колонка количества комментариев пользователя в админ-панели

Давно пользуюсь информацией с вашего сайта и ни у кого другого уже не надеюсь найти информацию по такому вопросу:

хочется в колонке со списком пользователей видеть количество комментариев каждого (чтобы вернее отсеивать ботов)

я нашел способ http://seobid.net/plagin-clean-up-users-chistim-bazu-polzovatelej/

но, видимо, со сменой версии вордпресс (WordPress 4.0.1) файлы изменились и теперь таких строчек в указанных файлах нет. Как выполнить задуманное?

второй момент: поставил форум bbpress и пришлось открыть регистрацию на WP. полезли боты в огромном количестве (откуда и взялся первый вопрос). Пробовал каптчей - они легко обходят все известные. Помогла только смена id=user_login на другое. может вам полезно будет

1
Гость
9.1 год назад
  • 4
    Kama9619
    /* 
    Колонка комментариев на странице пользователей в админке 
    v 1.0
    */
    
    add_filter( 'manage_users_columns', 'add_users_comm_column', 4 );
    add_filter( 'manage_users_custom_column', 'fill_users_comm_column', 5, 3);
    add_filter( 'manage_users_sortable_columns', 'add_users_comm_sortable_column' );
    add_action( 'pre_user_query', 'add_users_comm_sort_query' );
    
    # создаем новую колонку
    function add_users_comm_column( $columns ){
    	$columns['comments'] = 'Комм.';
    	$columns['register_date'] = 'Дата реги'; // добавляет дату реги
    	//unset( $columns['posts'] ); // удаляет колонку посты
    
    	return $columns;
    }
    
    # заполняем колонку данными
    function fill_users_comm_column( $out, $column_name, $user_id ){
    
    	$userdata = get_userdata( $user_id );
    
    	if( 'comments' === $column_name ){
    		$count = get_comments( array('user_id'=>$userdata->ID, 'count'=>true) );
    		$out = $count ? '<a href="'. admin_url('/edit-comments.php?s='. $userdata->user_login) .'">'. $count .'</a>' : '0';
    	}
    	elseif( 'register_date' === $column_name ){
    		$out = mysql2date('j M Y', $userdata->user_registered );
    	}
    
    	return $out;
    }
    
    # добавляем возможность сортировать колонку
    function add_users_comm_sortable_column($sortable_columns){
    	$sortable_columns['register_date'] = 'register_date';
    	$sortable_columns['comments'] = 'comments';
    
    	return $sortable_columns;
    }
    
    # сортировка колонки
    function add_users_comm_sort_query( $user_query ){
    	global $wpdb, $current_screen;
    
    	if ( $current_screen->id != 'users' )
    		return;
    
    	$vars = $user_query->query_vars;
    
    	if( 'register_date' === $vars['orderby'] ){
    		$user_query->query_orderby = ' ORDER BY user_registered '. $vars['order'];
    	} 
    	elseif( 'comments' === $vars['orderby'] ){
    		// SELECT * FROM `wp_users` LEFT JOIN (SELECT count(comment_ID) as comm_count, user_id FROM `wp_comments` GROUP BY user_id) as comm ON ( wp_users.ID = comm.user_id ) ORDER BY comm_count ASC
    		$user_query->query_from    .= " LEFT JOIN (SELECT count(comment_ID) as comm_count, user_id FROM $wpdb->comments GROUP BY user_id) as comm ON ( ID = comm.user_id )";
    		$user_query->query_orderby = ' ORDER BY comm_count '. $vars['order'];
    	} 
    
    }
    Дмитрий 9 лет назад

    Kama, у вас как всегда лучший вариант smile Но вопрос сортировки остался. Иначе как ботов с нулевыми комментариями чистить буду?

    Дмитрий 9 лет назад

    Теперь сортируется, но тем у кого камментов нет - ставит 1 коммент

    Дмитрий 9 лет назад

    у некоторых показывает по 2 и более комментария, но если нажать по ссылке, то ни одного не находится. А у некоторых нормально работает.

    Kama 9 лет назад

    Дополнил код, только что. Там все не так просто оказалось. У меня на этом блоге тоже такой функционал стоит, только еще есть ключ активации, дата последнего захода... Себе тоже добавил возможность сортировки по комментам.

    Kama 9 лет назад

    Щас, еще пошаманю

    Дмитрий 9 лет назад

    сейчас ищет по имени и соотв. пользователя "иван" находит во всех ипостасях. Лучше б по e-mail

    Kama 9 лет назад

    Подправил, то что по ссылке не совпадает колличество - это как бы номрально, там поиск WordPress работает /edit-comments.php?s=penuel82 почему-то WP не находит или находит лишние. Это поправлять доп. код нужен, лишняя работа, никому не нужная...

    Чтобы по email искал замените '/edit-comments.php?s='. $userdata->user_login на user_email...

    Kama 9 лет назад

    Еще такой вопрос. Почему не отмечаете галкой что ответ пользователя был дан правильно, не повышаете рейтинг ответа? Не работает у меня на сайте что ли что-то?

    Дмитрий 9 лет назад

    пытался отметить ответ, а мне выскочила надпись про регистрацию (регистрировался когда-то, но сразу не вспомню пароль). Отложил нажатие кнопки на потом. нажму обязательно - хороший ответ

    kenji 9 лет назад

    стрелочку вверх нажать не дал и после регистрации - не хватает "репутации".
    нажал на "галочку", чтобы это ни значило (нет хинта, что это)
    Подсчет комментариев теперь работает более понятно (после замены на user_email). Теперь у тех у кого нет комментариев имеют на счетчике 0.
    Правда некоторые комментарии все равно по ссылке не находятся, но там они, видимо, регистрировались по имени пользователя или еще как (неважно).
    Главное скрипт работает, все сортируется - не сомневался, что именно у вас найду самый правильный ответ.
    Собственно кроме разрозренных кусков на западных сайтах, есть только ваш сайт, который в этом деле может помочь. Желаю Вам и Вашему проекту wp-kama долгих и долгих лет жизни! Вы мне уже второй раз лично помогаете и несколько раз брал у вас суперполезный код.

    P.S. проявлю наглость и спрошу: а как сделать +1 -1, в комментариях, как у вас. В ближайшее время готов микро-спонсировать данный вопрос.
    P.P.S. "Чайниковский" рецепт. Боролся со спам-регистрациями. Помогла только замена имен полей вместо user_login на другие. Все известные каптчи пробивают в течение дня.

    kenji 9 лет назад

    еще немного проанализировал то, что получилось в колонке с комментариями. Комментарии некоторых пользователей не находит. Почему - непонятно. Стоит ноль.

    Kama 9 лет назад

    Если поймете почему не находит, дайте знать. Скорее всего, потому что коммент оставлен не залогинившить, как просто посетитель с одинаковым email...

    Дмитрий 9 лет назад

    у меня нельзя оставить комментарий не залогинившись.

    kenji 8.9 лет назад

    обновился до WordPress 4.0.5 - перестала добавляться колонка. Что-то они поменяли..

    Комментировать
  • 1
    stepan2278 www.weblancer.net/users/stepanko/?affili...

    Вот решение на Ваш вопрос
    http://themeforest.net/forums/thread/help-with-manage_users_columns-in-wordpress/50906

    Там похожая ситуация, выводится метаполе юзера.
    Вам же нужно выводить комментарии.
    Как получить комментарии пользователя - есть по ссылке, что Вы скинули в вопросе.

    Дмитрий 9 лет назад

    Спасибо, получилось!
    только не понял, как сделать колонку сортируемой!

    Комментировать
  • 0
    pfilan24 pfilan.ru

    Я сделал вот так

    $columns['comments'] = 'Комм.';
    $columns['comments'] = '✉';
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация