Discourse не связывает комментарии автоматически под статьями

Привет!
У меня возникла проблема: на Discourse больше не отображаются комментарии под моими статьями. Когда статья публикуется, она появляется на форуме Discourse нашего блога, но затем мне приходится вручную добавлять ссылку на неё в статье WordPress. Только после этого комментарии начинают отображаться. Ранее этот шаг был не нужен.

Я уже писал об этом здесь: 422 Unprocessable Content response when using ActivityPub with WP Discourse - #5 by Miasanrot

К сожалению, предложенное там решение не подошло мне, и, похоже, ситуация очень индивидуальна. Поэтому я создал новую тему. Вот три вещи, которые от меня попросили предоставить:

  1. Логи WP Discourse, включая мета-файл.
  2. Логи Discourse, в частности файл ошибок.
  3. Список плагинов, которые вы используете в Discourse.

Файлы логов WP Discourse:
Этот лог за сегодня:

[2024-03-14 06:02:59] comment.ERROR: sync_comments.response_error {"message":"Forbidden","discourse_topic_id":"","wp_post_id":13514,"http_code":403} 
[2024-03-14 07:14:26] comment.ERROR: sync_comments.response_error {"message":"Forbidden","discourse_topic_id":"","wp_post_id":13651,"http_code":403} 
[2024-03-14 08:22:19] comment.ERROR: sync_comments.response_error {"message":"Forbidden","discourse_topic_id":"","wp_post_id":13815,"http_code":403} 
[2024-03-14 08:48:21] comment.ERROR: sync_comments.response_error {"message":"Forbidden","discourse_topic_id":"","wp_post_id":13638,"http_code":403} 
[2024-03-14 09:37:36] comment.ERROR: sync_comments.response_error {"message":"Forbidden","discourse_topic_id":"","wp_post_id":13759,"http_code":403} 
[2024-03-14 10:55:34] comment.ERROR: sync_comments.response_error {"message":"Forbidden","discourse_topic_id":"","wp_post_id":13603,"http_code":403} 
[2024-03-14 11:25:23] comment.ERROR: sync_comments.response_error {"message":"Forbidden","discourse_topic_id":"","wp_post_id":13603,"http_code":403} 
[2024-03-14 12:36:28] comment.ERROR: sync_comments.response_error {"message":"Forbidden","discourse_topic_id":"","wp_post_id":13944,"http_code":403} 
[2024-03-14 16:03:01] comment.ERROR: sync_comments.response_error {"message":"Forbidden","discourse_topic_id":"","wp_post_id":13977,"http_code":403}

Вот что содержится в мета-файле:

Сервер

WordPress - 6.4.3
PHP - 8.0.26
MySQL - 8.0.30

Активные плагины

Admin Columns for ACF Fields - 0.3.1
Akismet Anti-spam: Spam Protection - 5.3.1
Borlabs Cookie - Cookie Opt-in - 2.2.67
Contact Form 7 - 5.8.6
Genesis Blocks - 3.1.1
LightStart - Maintenance Mode, Coming Soon and Landing Page Builder - 2.6.9
Podigee Wordpress Quick Publish – now with Gutenberg support! - 1.3.5
Proxy Real IP - 1.1
Shariff Wrapper - 4.6.9
TablePress - 2.2.5
TablePress Extension: Responsive Tables - 1.1
Theme Test Drive - 2.9.1
User Role Editor - 4.64.1
WP-Discourse - 2.5.1
WP Import Export - 3.9.26

Настройки WP Discourse (секретные данные исключены)

display-subcategories - 0
allow-tags - 0
max-tags - 5
publish-as-unlisted - 0
full-post-content - 0
custom-excerpt-length - 50
add-featured-link - 0
auto-publish - 1
force-publish - 0
force-publish-max-age - 5
publish-failure-notice - 1
auto-track - 1
allowed_post_types - post
exclude_tags -
hide-discourse-name-field - 0
discourse-username-editable - 1
direct-db-publication-flags - 0
verbose-publication-logs - 0
enable-discourse-comments - 1
comment-type - display-comments
ajax-load - 1
load-comment-css - 1
discourse-new-tab - 1
hide-wordpress-comments - 1
show-existing-comments - 1
max-comments - 50
min-replies - 1
min-score - 0
min-trust-level - 0
bypass-trust-level-score - 50
only-show-moderator-liked - 0
custom-datetime-format -
cache-html - 1
clear-cached-comment-html - 0
verbose-comment-logs - 0
use-discourse-webhook - 1
webhook-match-old-topics - 0
use-discourse-user-webhook - 0
webhook-match-user-email - 0
enable-sso - 0
auto-create-sso-user - 0
real-name-as-discourse-name - 0
force-avatar-update - 0
redirect-without-login - 0
sso-client-enabled - 0
sso-client-login-form-change - 0
sso-client-sync-by-email - 0
sso-client-sync-logout - 0
logs-enabled - 1


Я не знаю, как скачать или скопировать что-либо из журнала ошибок Discourse, но вот скриншот за сегодня. 16:06 — это почти то время, когда была опубликована наша последняя статья (16:11).
![Bildschirmfoto 2024-03-14 um 17.34.05|690x247](upload://wu9pBHBGw6RdklTgJtK9XJCIOHx.png)

**Список плагинов в Discourse:**

Chat (отключён), Data Explorer, Footnote, Spoiler Alert

Если нужно добавить что-то ещё, дайте знать. Заранее спасибо за помощь.

Привет, @Miasanrot, спасибо за все эти подробности, мы очень ценим!

Первое, что нужно проверить, — это ошибка синхронизации комментариев с кодом 403 в логах, которая, похоже, связана с вашей проблемой отсутствия комментариев. Ошибка 403 означает, что WP Discourse не может получить доступ к Discourse, вероятно, из-за сбоя авторизации.

  1. На вкладке «Подключение» в панели администратора WP Discourse вы видите сообщение «Вы подключены к Discourse!»?

  2. Поскольку вы используете плагин WordPress «Proxy Real IP - 1.1», меня интересует сетевая среда вашего WordPress и Discourse. Какую роль играет этот плагин?

Спасибо за быстрый ответ! Это тоже очень ценно.

Да, он показывает, что я подключен. И также, похоже, что что-то создается при публикации статьи. В WP я иногда вижу ошибку, что статья уже встроена (думаю, это та же проблема, с которой столкнулся пользователь в теме, на которую я дал ссылку). Поэтому я тоже считаю, что должна быть какая-то связь (и это отображается в панели администратора, как я уже писал).

Второй пункт немного сложнее. Я принял этот блог в январе, поэтому не настраивал всё сам. Но я спросил предыдущего администратора об этом плагине и вернусь к вам, как только получу ответ.

Редактирование: Он сказал, что плагин можно отключить. Так что я могу попробовать это сделать на следующем этапе?

К сожалению, решения пока нет. Отключение упомянутого выше плагина не помогло.

Извините, Джастин, я потерял нить этого обсуждения. Проблема, скорее всего, связана с особенностями вашей настройки WordPress.

(выделение моё)

Когда они перестали работать? Можете ли вы определить, что изменилось в WordPress, когда комментарии перестали отображаться? Произошло ли следующее:

  1. Вы обновили WordPress?
  2. Вы обновили плагин?
  3. Изменилась (или обновилась) ваша тема?

Привет, Джастин, просто уточняю. Как у тебя продвигается решение этой проблемы?

Спасибо, что заглянули!

Трудно ответить точно, но, думаю, именно обновление WordPress (и PHP, оба в один день) стало тем моментом, когда всё началось. По крайней мере, я впервые столкнулся с этой проблемой после этого. У меня установлена вторая по новизне версия WordPress (по-моему, в последние дни вышла 6.5, но я её ещё не установил) и PHP 7.4, если я правильно помню.

Плагин Discourse работает в версии 2.5.1.

Не знаете ли вы, с какой версии WordPress вы обновлялись? Какое время прошло между обновлениями? Также вы обновляли тему одновременно с этим? Является ли ваша тема «блочной темой»?

Надеюсь, я смогу ответить, не допустив недопонимания или ошибок в информации. Я взял этот блог в январе, и версия WP была довольно старой. Думаю, 5.x, точный номер назвать не могу. Между двумя обновлениями прошло действительно много времени. Наша тема осталась прежней — это индивидуальная тема, разработанная и запрограммированная специально для нашего сайта. Я знал, что при обновлении сайта это может вызвать проблемы, особенно учитывая, что у меня нет навыков программирования, но всё казалось в порядке, пока я не столкнулся с этим инструментом Discourse.

Извините, если не могу предоставить более подробную информацию, я стараюсь как могу :smiley:
Ещё раз спасибо за ваше терпение и помощь.

Понятно. Это значительное обновление (то есть с WordPress 5.x на 6.x). Возможно ли протестировать это с темой по умолчанию WordPress (любой темой по умолчанию WordPress) и посмотреть, сохраняется ли у вас та же проблема? Я знаю, что это немного хлопотно, однако это наиболее вероятная причина здесь (то есть ваша тема). Возможно, вам потребуется перейти к блоку комментариев.

Это должно быть возможно. Я опубликую статью позже сегодня и смогу переключиться на тему WP чуть раньше, чтобы проверить, работает ли это.

О, и ещё одно дополнение @angus: что именно означает «тема на блоках»? У меня в WP есть редактор блоков для таких вещей, как страницы и статьи, но если «тема на блоках» означает, что я могу просто добавлять блоки для дизайна страницы так, как хочу, то это не тема на блоках. Просто для уточнения.

Итак, я переключился на тему WordPress Twenty Twenty-Three и опубликовал свою статью. Как обычно, в Discourse создалась тема, но, как и раньше, она не была связана с разделом комментариев блога, и мне пришлось сделать это вручную.

Понятно. Что-то на вашем сайте мешает плагину работать корректно. Если проблема не в теме, следующим шагом стоит проверить другие установленные вами плагины.

Без более детальной информации о вашем сайте я могу лишь посоветовать поочередно отключать плагины и проверять, изменится ли поведение сайта. Возможно, один из них несовместим с текущей версией WordPress или PHP 8.x (плагин WP Discourse совместим с обоими).

Опять же, возможно, это не то, что вы хотели услышать, но в такой модульной системе, как WordPress, подобные проблемы (например, конфликты плагинов) вполне возможны. На данном этапе стоит попытаться исключить этот источник ошибок.

Возможно, это связано с кэшированием в сочетании с темой? Я не разбираюсь во всём этом, но иногда мелкие элементы не отображаются на странице, а после очистки кэша всё работает. Например: вчера я вручную добавил ссылку на статью, и комментарии всё равно не появились. Очистка кэша помогла.

Сегодня я опубликовал статью, и она автоматически связалась с Discourse, как и должно быть. Но комментарии снова не отображались. Опять я очистил кэш, и они появились. Мне сложно это понять, но что-то здесь не так.

Да, кэширование может быть причиной вашей проблемы. Попробуйте использовать настройку «Загружать комментарии через Ajax» во вкладке «Комментирование» в настройках WP Discourse.

Какое решение для кэширования вы используете?

Параметр был активирован.

Я использую WP Rocket для кэширования, но установил его после того, как возникли некоторые проблемы. Эти проблемы, казалось, были решены. Но я не могу точно сказать вам, как именно работало кэширование до этого. Я знаю, что кэширование существовало, но не знаю конкретного решения. Когда я взял блог под управление, я заметил медленную загрузку изображений. После использования WP Rocket ситуация, похоже, улучшилась уже на протяжении одного-двух месяцев. (Проблема с комментариями существовала ещё до моей установки плагина)

Однако в редких случаях у нас возникает проблема, когда на странице отображается что-то некорректно. На прошлой неделе после ручного подключения к Discourse отсутствовали комментарии. Тогда я очистил кэш через WP Rocket, и всё снова заработало.

Похоже, у меня та же или схожая проблема с ошибками 422. Я уже обсудил с @angus, что настрою тестовую среду (WP и Discourse) для тестирования, надеюсь, в эти выходные…

WP Rocket может стать настоящей головной болью. Он создаёт статическую копию вашего контента, но пытается оставить нетронутыми те части, которые должны быть динамическими или должны быть статичными лишь очень короткое время. Если вам повезёт найти правило, которое надёжно отключает кэширование комментариев, всё будет работать — но вы начнёте терять те преимущества, которые получили.

С точки зрения кэширования WordPress — это… не совсем кошмар, но близко. Я отказался от WP Rocket, потому что он требовал слишком много внимания и времени, и работает лучше всего при довольно коротких TTL. Я получил лучшие результаты, используя другие инструменты (и тогда стоит быть реалистом: есть ли какие-то веские причины пытаться сэкономить секунду, если это требует нескольких часов моей работы почти каждую неделю; отключение ненужных плагинов и выбор правильной темы — более разумный вариант).

Большинство сайтов на самом деле не нуждаются в комментариях, так как получают их довольно редко, а в таких случаях Discourse в качестве раздела комментариев служит другим целям. Но, конечно, это зависит от ситуации.

Для меня подключение к Discourse работает как реклама. Но большинство моих посетителей используют телефоны и почти никогда не прокручивают страницу достаточно вниз — это тот же самый вопрос, что и с боковыми панелями.

А какие именно инструменты? Повторюсь: я не очень знаком со всеми этими техническими вещами, поэтому я здесь и пытаюсь понять, есть ли какая-то помощь по моей проблеме. Проблема существовала ещё до установки WP Rocket, который решил некоторые другие виды проблем, но если этот инструмент в чём-то проблематичен, я открыт для других решений.

У нас под статьями бывает до 100–200 комментариев (точнее, в Discourse), поэтому справедливо сказать, что мы хотим их интеграции, даже если пользователь, который просто хочет прочитать статью, не будет прокручивать страницу вниз.

Это не входит в сферу обсуждения на этом форуме, так как речь идёт об оптимизации WordPress. Попробуйте Facebook, например, по запросу «ускорение WordPress».

Однако вас могут заинтересовать такие плагины, как Asset CleanUp, EWWW Image Optimizer или даже Redis, если у вас много одновременных пользователей. Вам следует использовать хотя бы инструменты Nginx, чтобы отсекать как можно больше бот-трафика. Но ни один из них не поможет особенно сильно, если реальные узкие места — это тема и множество различных плагинов. И плохая новость в том, что вам нужно периодически очищать саму базу данных.

Но если WP Rocket помогает — это отлично. Однако не устанавливайте слишком длительное время кэширования. И обязательно добавьте Discourse в чёрный список кэша.