Настройка WP Discourse для отображения комментариев из Discourse

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

Следующий шаг

После настройки комментариев вы можете ознакомиться со следующими темами:


Инструкции

Настройка комментариев

Чтобы комментарии Discourse отображались на вашем сайте WordPress, необходимо включить настройку «Включить комментарии Discourse». При включении этой опции появятся два варианта. Опция «Отображать комментарии» загрузит шаблон комментариев для каждой записи WordPress, опубликованной в Discourse. Этот шаблон будет отображать комментарии Discourse под записями WordPress. Опция «Отображать ссылку на комментарии» загрузит шаблон комментариев, который показывает ссылку на соответствующую тему Discourse под опубликованными записями. В ссылке будет указано количество ответов на тему, но сами ответы на WordPress отображаться не будут.

Оба варианта работы комментариев основаны на загрузке шаблонов комментариев для записей WordPress. Это означает, что они будут работать только в том случае, если для записи включены комментарии. Если вы хотите включить комментарии для всех записей, но не хотите, чтобы исторические комментарии WordPress отображались для записей, которые не были опубликованы в Discourse, включите настройку «Удалить шаблон комментариев WordPress».

Настройки

Ниже приведены краткие описания того, что делают другие настройки комментариев. Если у вас всё ещё есть вопросы по какой-либо из настроек, ответьте в этой теме и попросите дополнительных разъяснений.

Загрузка комментариев через Ajax

Эта настройка используется для загрузки комментариев с клиента WordPress вместо загрузки с сервера. Это полезно, если кэширование страниц препятствует загрузке свежих комментариев на вашем сайте.

Загрузка CSS комментариев

Эта настройка загружает таблицу стилей, которая исправляет проблемы с onebox и цитатами Discourse при их отображении на WordPress.

Показывать существующие комментарии WP

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

Заголовок для существующих комментариев

Если вы показываете существующие комментарии, эта настройка добавит заголовок над комментариями WordPress.

Настройки выборочного импорта

Существует ряд настроек, позволяющих выборочно импортировать комментарии. Они должны быть понятны без дополнительных объяснений. Значения по умолчанию для каждой из них — хорошая отправная точка, поэтому изменяйте их только при наличии веской причины.

  • Максимальное количество видимых комментариев
  • Минимальное количество ответов
  • Минимальный балл постов
  • Минимальный уровень доверия
  • Обход порога уровня доверия
  • Импортировать только лайкнутые модераторами
Пользовательский формат даты и времени

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

Кэширование HTML комментариев

Эта настройка может быть использована для повышения производительности. Кэширование HTML комментариев сокращает количество запросов к Discourse. Связанная с ней настройка «Очистить кэшированный HTML комментариев» должна быть понятна без дополнительных объяснений.

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

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

Вебхук синхронизации данных комментариев

Включение вебхука синхронизации данных комментариев в панели настроек «Вебхуки» может значительно сократить количество API-запросов, отправляемых из WordPress в Discourse. Перед включением вебхука выполните следующие действия:

  1. Перейдите по URL-адресу Discourse, указанному в описании настройки (http://forum.example.com/admin/api/web_hooks).

  2. Нажмите кнопку «Новый вебхук» и заполните форму:

    • В поле «URL полезной нагрузки» введите URL, указанный в описании поля WP Discourse «Синхронизация данных комментариев». Он будет выглядеть примерно так, но с использованием URL-адреса вашего сайта WordPress: https://wp-discourse.dev/wp-json/wp-discourse/v1/update-topic-content.

    • Убедитесь, что поле «Тип содержимого» установлено в значение application/json.

    • В поле ввода «Секрет» введите строку текста длиной не менее 12 символов. Затем скопируйте этот же ключ в настройку WP Discourse «Ключ секрета вебхука».

    • В поле «Какие события должны запускать этот вебхук?» убедитесь, что выбрано «Событие поста».

    • Используйте поле «Категории для запуска», если вы публикуете посты из WordPress только в определённые категории. Таким образом, вашему сайту WordPress не нужно будет обрабатывать запросы вебхука для тем, у которых нет связанного поста в Discourse.

    • Оставьте включённой настройку «Проверять сертификат TLS URL-адреса полезной нагрузки».

    Наконец, установите флажок «Активен» и нажмите «Создать». После сохранения вебхука нажмите кнопку «Перейти к событиям».

  3. Вернитесь на WordPress, убедитесь, что вы ввели секрет вебхука из Discourse в поле «Ключ секрета вебхука», и включите настройку вебхука «Синхронизация данных комментариев». Затем сохраните параметры.

Вебхук Discourse должен теперь работать. Проверьте его, нажав кнопку Ping вебхука в Discourse (находится по адресу /admin/api/web_hooks/:webhook_id/events). Убедитесь, что при пинге вебхука возвращается статус-код 200.

Настройка периода синхронизации comments_number для архивных страниц WordPress

Чтобы получить правильное количество комментариев Discourse для записи, плагин должен периодически отправлять HTTP-запрос к Discourse для получения актуального количества комментариев. На отдельных страницах этот период установлен не чаще одного раза в 10 минут. Для архивных страниц период установлен не чаще одного раза в 24 часа. Это сделано для того, чтобы избежать множественных запросов к Discourse при каждом обращении к архивной странице.

Если вы всё же обнаружите, что плагин делает слишком много запросов к Discourse при отображении архивных страниц вашего сайта, вы можете настроить archive_page_sync_period, подключившись к фильтру 'discourse_archive_page_sync_period'. Для этого добавьте что-то подобное в файл functions.php вашей темы:

add_filter( 'discourse_archive_page_sync_period', 'my_namespace_archive_page_sync_period' );
function my_namespace_archive_page_sync_period( $sync_period ) {
  // Это изменит период синхронизации для архивных постов на один раз в неделю.
  return WEEK_IN_SECONDS;
}

Если вы обнаружите, что плагин делает недостаточно запросов к Discourse для получения актуальных количеств комментариев для архивных страниц, вы можете добавить что-то подобное в файл functions.php вашей темы. Это установит archive_page_sync_period на 10 минут.
Примечание: на загруженном сайте это может создать высокую нагрузку на ваш сервер.

add_filter( 'discourse_archive_page_sync_period', 'my_namespace_archive_page_sync_period' );
function my_namespace_archive_page_sync_period( $sync_period ) {
  // Это изменит период синхронизации для архивных постов на один раз в неделю.
  return 10 * MINUTE_IN_SECONDS;
}

Отображение комментариев без загрузки шаблона комментариев WordPress

Плагин WP Discourse использует шаблон комментариев WordPress для загрузки комментариев Discourse. Если ваша тема не загружает шаблон комментариев, вы можете отобразить комментарии с помощью статической функции-помощника get_discourse_comments. Эта функция требует, чтобы вы указали ID записи WordPress, для которой хотите отобразить комментарии. Вот простой пример её использования:

use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
$discourse_comments = DiscourseUtilities::get_discourse_comments(859);
echo $discourse_comments;

Комментарии будут отображаться так же, как и при выборе опции «Включить комментарии Discourse/Отображать комментарии» (находится на вкладке «Настройки комментариев» плагина). При использовании этой функции значение этой настройки игнорируется, но все остальные настройки комментариев учитываются.

Устранение неполадок

Самая распространённая проблема с комментариями Discourse заключается в том, что они могут не появляться сразу после публикации поста в Discourse. Эта задержка намеренная, так как плагин пытается сократить количество запросов, которые ему нужно делать к Discourse. Выполнение запроса при каждой загрузке страницы замедлит работу вашего сайта. Если вы не видите, что комментарии появляются мгновенно, подождите 10 минут перед повторным обновлением страницы.

Проблемы с количеством комментариев при отображении как комментариев Discourse, так и WordPress

Плагин wp-discourse использует фильтр-хук WordPress get_comments_number, чтобы количество комментариев Discourse, созданных для записи, могло отображаться по всему вашему сайту. Это создаёт конфликт, когда для записи отображаются как комментарии Discourse, так и WordPress. Плагин способен разрешить этот конфликт в большинстве случаев. Одно место, где его нельзя разрешить, — это заголовок комментариев, который темы WordPress часто отображают в начале раздела комментариев. Это раздел, который начинается со слов вроде «2 мысли о…».

Самый простой способ решить эту проблему — добавить правило в файл CSS вашей темы.

.discourse-comments-area ~ .comments-area .comments-title  {
	display: none;
}
8 лайков

@angus очень полезное руководство и видео, спасибо, что собрали всё вместе. Мы внедрили плагин, но застряли на функциональности комментариев. У нас есть два вопроса/проблемы:

  • Когда мы публикуем ответ на Discourse (в ответ на общий пост из WordPress), мы видим, что счётчик ответов на WordPress меняется, но сам комментарий не отображается.
  • Мы хотели бы отключить комментарии в WordPress, чтобы пользователи могли отвечать только через Discourse. Это возможно?

Вот что мы видим: обратите внимание, что этот «1» ответ — из Discourse, но сам ответ не виден:

CC: @Abdelrahman_MoHamed

Привет, @Jacob_Peebles,

Если вы уже следовали указанному выше руководству, следующим шагом будет проверка вашей темы. Возможно, вы используете блочную тему (Block Theme)? Если да, ознакомьтесь с:

Да, просто отключите комментарии в WordPress.

  1. В панели управления выберите Настройки > Обсуждение.
  2. Снимите галочку напротив пункта «Разрешить пользователям публиковать комментарии к новым статьям».
  3. Нажмите «Сохранить настройки».
1 лайк

@angus - отлично, сработало как по маслу! Да, похоже, мы используем редактор «Блок». Вы можете увидеть, как всё работает здесь:

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

Спасибо ещё раз.

Извините, вот ещё скриншот.

Рад, что у вас всё работает, Джейкоб.

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

ol.comment-list {
    list-style: none;
    padding: 0;
}

img.avatar.photo.avatar-default {
    height: 40px;
    width: 40px;
}

.comment-author.vcard {
   display: flex;
   align-items: center;
   gap: 1em;
}

1 лайк

Отлично, @angus

Привет, @angus!

Спасибо за отличный плагин и полезные инструкции!

Я интегрировал Discourse с моим сайтом на WordPress, и соединение установлено.
Мне удалось создать запись на сайте WP и увидеть, что она появилась как новая тема в Discourse — это здорово!

Однако в Discourse всегда отображается только первоначальный текст записи как фрагмент (например, «hello world»), и содержимое темы в Discourse не обновляется после изменения записи на WP. Изменения в содержимом отображаются только при нажатии кнопки «Показать полную запись». Это означает, что я не могу изменить настройку так, чтобы всегда показывалось полное содержание записи, а не только фрагмент. Когда я включаю эту настройку, кнопка исчезает из темы в Discourse, и отображается только первоначальное содержимое до обновления. Не уверен, понятно ли я объясняю?


(это при настройке на показ полного содержимого)


(это фрагмент при настройке на показ только фрагмента)


(а это то, что отображается при нажатии кнопки «Показать полный текст», как и на записи в WP)

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

Буду очень признателен за любые советы по этим двум пунктам. Спасибо!

Привет, @Clo, спасибо, что опробовали плагин. Не могли бы вы уточнить, каким вы видите идеальный процесс публикации? Постарайтесь описать это в формате «пользовательской истории». Что касается комментариев: включены ли на вашем сайте комментарии WordPress?

Привет, @angus

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

Однако я также хотел спросить: возможно ли, чтобы плагин создавал новую запись в WP каждый раз, когда в Discourse создаётся новая тема? Или это работает только в обратном направлении?

Это возможно только с помощью дополнительных пользовательских плагинов как на стороне WordPress, так и на стороне Discourse. Сам плагин WP Discourse не предназначен для такой задачи.

Очень вам благодарны, это полезно.
Отличный плагин!

1 лайк