Gravatar & WordPress — работаем без глюков

Взаимосвязь Цордпресс и Граватар
В статье Аватары в WordPress я затрагивал вопрос о том, как выделить себя в толпе комментаторов. Но благодаря Сергею Никифорову с его сайтом Эффективного Саморазвития, выяснилась одна проблемка — иногда в комментариях пользователя не отображается зарегистрированный в gravatar по указанному email аватар. Вместо него отображается стандартный значок отсутствия аватара. По данному вопросу Сергей обращался даже в службу поддержки, но никто не смог ему помочь решить данный казус. Проблема меня немножко удивила — я даже не сразу понял суть проблемы. Но после ознакомления с блогом Сергея, принялся искать причины…
После недолгих разбирательств, выяснилось что в тех комментариях, в которых не отображается аватар, сколько ни подставляй другие имейлы, аватар так и не отобразится. Значит нужно смотреть эти комментарии — в них должны быть какие-то различия.
Таблица комментариев
В таблице «wp_comments» было найдено поле user_id, которое указывает на id зарегистрированного пользователя. И если пользователь по какой либо причине был удален на блоге, то все его комментарии будут отображаться без аватара вне зависимости от того — есть ли аватар в системе gravatar на указанный имейл или нет. Так написано в коде отображения комментариев — если user_id не равен нулю, то ищется указанный пользователь. Если пользователь найден, то отображается аватар на тот имейл, который указан у пользователя в таблице wp_users в поле user_email.
Отсюда следующие способы решения проблемы:
1 Отредактировать код отображения комментариев. Но вариант сразу отпадает, так как после следующего обновления версии wordpress, придется снова редактировать код.
2 Добавить в систему недостающих(ранее удаленных) пользователей. К примеру, можно выполнить SQL запрос

INSERT INTO `wordpress_blog`.`wp_users` 
(`ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_url`, 
`user_registered`, `user_activation_key`, `user_status`, `display_name`) 
VALUES (NULL, 'js', 'js', 'js', '[email protected]', 'http://tithost.ru', 
'0000-00-00 00:00:00', '', '0', 'JS');

Вместо [email protected] нужно вставить тот емаил, который Вам необходим.
3 Обновим у всех комментариев поле user_id в ноль, если они ссылаются на несуществующего пользователя. Для этого нужно выполнить слещующий SQL запрос

UPDATE `wordpress_blog`.`wp_comments` cmn SET cmn.`user_id`=0 
WHERE (SELECT count(usr.id) FROM `wordpress_blog`.`wp_users` usr 
WHERE usr.id=cmn.user_id)=0

Ко мне пришли по этим поисковым фразам:

JohnnySuperb

Человек с разными склонностями и потребностями..

12 Comments

  1. Евгений, Здравствуйте!)))

    …Да, именно благодаря Вам я имею возможность любоваться стилями комментариев!)) Если бы не Вы, — до сих пор бы рвал волосы везде, где только можно, и не только свои)))) Много крови мне этот вопрос попортил…

    Огромное Вам Спасибо, еще раз, за простое и эффективное решение!))

  2. Перестали отражаться стандартные значки аватаров( к стати смотрю у вас тоже). Не знаю от чего, но скорее всего после обновления WP. Кто знает как исправить?

  3. Установил плагин User-Avatar, появилась возможность закачки изображений. Однако в комментариях отображается по-прежнему Граватар. В настройках все перепробовал. А вот в код не лез. Может, там проблема?

  4. Здравствуйте!

    Начал недавно делать сайт на WordPress. Установил последнюю версию движка с официального сайта, а также плагины Easy Gravatars и Simple Local Avatars. Плагины актививированы, в настройках обсуждения установлена галочка — «показывать аватары». Однако при просмотре комментариев в панели управления аватары отображаются, а вот на самом сайте – нет. Ни граватары, ни собственные аватары на сайте в комментариях не отображаются. В чем, по Вашему мнению, может быть причина?

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