Вниз

12 Июль 2010

WordPress: решаем проблему отображения неверного количества комментариев

После экспорта моего блога с wordpress.com оставалась одна незначительная проблема, которую я сегодня победил: под старыми постами отображалось нулевое количество комментариев, хотя они там были и их можно было прочитать, зайдя в запись.
Как выяснилось, это связано с тем, что вордпресс кэширует количество комментариев к каждой записи, чтоб не пересчитывать это число при каждой загрузке страницы, в результате по каким-то соображениям число комментариев в кэше стало отображаться неверно.


Как выяснить, какие посты рассинхронизированы?

Запустите Вашу программу администрирования БД (я использовал PHPMyAdmin для этой задачи) и выполните следующий запрос к базе. Он предполагает, что база называется wordpress, а префикс базы wp_, так что отредактируйте это по своим нуждам.

SELECT wpp.id, wpp.post_title, wpp.comment_count, wpc.cnt
FROM wordpress.wp_posts wpp
LEFT JOIN
(SELECT comment_post_id AS c_post_id, count(*) AS cnt FROM wordpress.wp_comments
 WHERE comment_approved = 1 GROUP BY comment_post_id) wpc
ON wpp.id=wpc.c_post_id
WHERE wpp.post_type IN ('post', 'page')
      AND (wpp.comment_count!=wpc.cnt OR (wpp.comment_count != 0 AND wpc.cnt IS NULL));

Результатом данного запроса будет список постов, у которых число comments.count отличается от реального числа. Слева отображаются кэшированное, справа — реальное число комментов.

Как исправить число комментариев автоматически?

Перед следующим действием ОБЯЗАТЕЛЬНО сделайте бэкап базы!!!

Данный запрос исправит число комментариев на верное:

UPDATE wordpress.wp_posts wpp
LEFT JOIN
(SELECT comment_post_id AS c_post_id, count(*) AS cnt FROM wordpress.wp_comments
 WHERE comment_approved = 1 GROUP BY comment_post_id) wpc
ON wpp.id=wpc.c_post_id
SET wpp.comment_count=wpc.cnt
WHERE wpp.post_type IN ('post', 'page')
      AND (wpp.comment_count!=wpc.cnt OR (wpp.comment_count != 0 AND wpc.cnt IS NULL));

 


Вот и все. Пишите в комментариях о результатах! :)
Огромное спасибо Artem Russakovskii.

Еще по теме:

  1. HOWTO: Как перенести блог с WordPress.com на собственный хостинг с WordPress
  2. Java-client for WordPress
  3. Выбор хостинга для блога на WordPress
  4. HOWTO: делаем "правильные" скриншоты
  5. Майкрософт использует крякнутый софт!

Поделись своими мыслями!

(обязательно)
(обязательно)

Почтовые адреса не публикуются.

Подпишись на комментарии

Получать новые комментарии по электронной почте. Вы можете подписаться без комментирования.