Счетчик непрочитанных комментариев

👍 Научим создавать сайты на WordPress бесплатно за 19 уроков. Подробнее →

Как можно реализовать показ непрочитанных комментариев пользователем?

Например в цикле loop чтоб после фото и превью поста было:
Написал Никi, 27.12.2012 в 22.22 | 462 комментария / 212 новых

Желательно не используя тяжеловесных плагинов.

Создай свой первый сайт на WordPress

qazomardok
Оцените автора
Добавить комментарий

  1. vcevmecte

    Да, мне тоже было бы интересно узнать как. Есть какие-то мысли?

    Ответить
  2. qazomardok автор

    Да никаких. После трех месяцев поиска плюнул, создал в бд новую таблицу c полями [счетчик], [ИД_поста], [Кол-во_новых_комментов], [ИД пользователя] и [дата_время_просмотра]
    (numb post_id new_comm user_id post_time) и при каждом посещении страницы обновляю таблицу. Бред конечно (а если 5000 хстов в сутки будет) и нужны доработки (лень доделывать), но вроде работает.

    function unread() {
    	
    	
    	
    	// Подключаемси :)
    	
    		include (************);
    		$db = mysql_connect(***********);
    		mysql_select_db(***********);
    
    		
    		global $current_user;
    		get_currentuserinfo();
    		$i_am = $current_user->user_login;
    		$i_am_id = $current_user->ID; /// ID пользователя, просматривающего сайт
    		$postid = get_the_ID(); ///ID просматриваемого поста
    		$null=0;	
    	 
    	 $i_am_c = get_comments_number( get_the_ID());  ///Общее количество комментариев поста.
    	 $c='zero'; /// Количество новых комментариев
    	 $ct=current_time('timestamp', 4);
    
    	 
    	 $sqo=mysql_query("SELECT * FROM `hlynovstan619`.`wp_comments_new` WHERE `post_id` = '".$postid."' AND `user_id`= '".$i_am_id."'" ,$db);  // Выборка из БД инфы о непрочитанных комментариях текущего поста текущего юзера
    			
    				while ($k = mysql_fetch_row($sqo))
    					  {		
    							$c=$k[2]; //сколько коментариев пользователь видел (поле [new_comm])
    							$null=$null+1; // Считаем строки (не помню, зачем это я сделал)
    						}
    							
    							
    			/*
    			* Обновляем время просмотра.		
    			* Если мы находимся на странице новости и наш счетчик равен нулю (посещаем страницу впервые),
    			* то вставляем новую строку.
    			* 
    			* $c=0 мы определили вначале, и если при запросе выше мы получаем 0 строк, 
    			* то $c, соответственно у нас не изменен.	*/			
    			if ((is_single()) AND ($c==0)) {
    				
    				mysql_query("INSERT INTO `hlynovstan619`.`wp_comments_new` (`post_id`, `new_comm`, `user_id`, `post_time`) VALUES ('".$postid."', '".$i_am_c."', '".$i_am_id."', '".current_time('timestamp', 4)."');",$db); 	
    				
    			}
    							
    				
    			/*Если у нас количество "новых" не равно количеству "всего", то обновляем и перезаписываем. */
    			if ((is_single()) AND ($c!=$i_am_c)) { 
    				
    				mysql_query("UPDATE `hlynovstan619`.`wp_comments_new` SET `new_comm` = '".$i_am_c."' WHERE `wp_comments_new`.`post_id` =".$postid." AND `wp_comments_new`.`user_id`='".$i_am_id."';",$db);
    				
    			}			
    	 
    	
    
    	$new_count=$i_am_c-$c;   // Разница между записью в БД и текущим кол-вом = количество новых комментариев.
    	
    	/* Здесь немного обрабатываем для придания читаемости ссылки:
    	Смотрим первое справа число (131, 1, 51, 23), и если оно равно единице или нет, то присваиваем переменным
    	определенный падеж*/
    	$rest = substr($new_count, -1);
    	if ($rest==1) {$n=' новый';$j=' удален';$h=' комментарий';} else {$n=' новых';$j=' удалено';$h=' комментариев';}
    	
    
    	
    	
    	if ($new_count==0) { 
    	
    			echo ''; // Не выводим ничего, если счетчик равен нулю
    			
    			
    			} else {
    		
    		
    		
    		$pml=get_permalink( $id );
    		if ($new_count<0) {	
    		
    			$new_count=-$new_count; $new=' / '.$new_count.$h.$j; // Текст а-ля "5 комментариев удалено"
    			
    		} else {
    			
    			$new=' / '.$new_count.$n.''; // Ссылка а-ля "7 новых"
    			
    			}
    		
    		
    		}
    	
    	echo $new;  /// PROFIT
    	
    	}

    Также в конце single.php мы обновляем время просмотра страницы с помощью запроса:

    mysql_query("UPDATE `hlynovstan619`.`wp_comments_new` SET `post_time` = '".current_time('timestamp', 4)."' WHERE `wp_comments_new`.`post_id` =".$postid." AND `wp_comments_new`.`user_id`='".$i_am_id."';",$db);

    Постскриптум: 1. Да, я пока не разбираюсь в работе с SQL средствами wordpress.
    2. Да, в коде есть баги, недочности и недочеты. Например:
    а. Нет склонений для фраз типа "2 комментарИЯ" и др.
    б. При первом посещении поста (когда еще в бд нет записи) у нас нет , соответственно записи о последнем посещении, что потом сказалось при написании кода подсветки новых комментариев на странице.
    в. Конечно же, слишком частое обращение к БД.

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

    Была мысль использовать куки, но ... как-то отпала ..

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

    Ответить
  3. tiaurus

    Есть несколько плагинов, подсчитывающих новые комментарии:
    WP Since Last Visit
    — Smart Unread Comments
    — View Unread Comments

    Ответить
  4. qazomardok автор

    С первым дело не имел, — но он не обновлялся с 2005 года.

    А второй и третий — это показ только списка новых комментариев
    а). в виджете
    б). считается весь блог
    в). пока их «адаптируешь» — получится с нуля новый плагин напишешь

    Ответить