После экспорта моего блога с 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 отличается от реального числа. Слева отображаются кэшированное, справа — реальное число комментов.
Рекламная пауза: Если вас интересует широкоформатная печать, то стоит обратиться к профессионалам. Например, в компанию FeelDi.
Как исправить число комментариев автоматически?
Перед следующим действием ОБЯЗАТЕЛЬНО сделайте бэкап базы!!!
Данный запрос исправит число комментариев на верное:
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 за оригинал статьи.
То, что врач прописал! Спасибо!
Добрый вечер!
Подскажите, если БД называется по другому и префиксы изменены, то что следует менять?
И где делать запросы в PHPMyAdmin?
Заранее благодарю за ответ
Огромное спасибо, выручили! Я уж собирался вручную как-то всё менять, это была бы жесть! А так 5 минут, и готово.
@ Артем:
На будущее, если у кого ещё вопросы будут. wordpress в данном примере — это имя бд. wp_ — это префикс. Заменяете на свои — и вуаля!