👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →
Как можно реализовать показ непрочитанных комментариев пользователем?
Например в цикле loop чтоб после фото и превью поста было:
Написал Никi, 27.12.2012 в 22.22 | 462 комментария / 212 новых
Желательно не используя тяжеловесных плагинов.


Да, мне тоже было бы интересно узнать как. Есть какие-то мысли?
Да никаких. После трех месяцев поиска плюнул, создал в бд новую таблицу 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 комментарИЯ" и др.
б. При первом посещении поста (когда еще в бд нет записи) у нас нет , соответственно записи о последнем посещении, что потом сказалось при написании кода подсветки новых комментариев на странице.
в. Конечно же, слишком частое обращение к БД.
НО, моя задача показать путь реализации, и, возможно кто-нибудь возьмет код за основу и сделает хороший плагин)
Была мысль использовать куки, но ... как-то отпала ..
Ах да, - код выше, конечно же мой и там мои данные о полях и таблицах бд. И конечно же, надо будет указываеть свои )
Есть несколько плагинов, подсчитывающих новые комментарии:
– WP Since Last Visit
– Smart Unread Comments
– View Unread Comments
С первым дело не имел, – но он не обновлялся с 2005 года.
А второй и третий – это показ только списка новых комментариев
а). в виджете
б). считается весь блог
в). пока их “адаптируешь” – получится с нуля новый плагин напишешь