Решение найдено — спасибо @simon и @Lilly за невероятную поддержку.
Изменения, внесённые по совету Саймона:
Обновил код из урока, убрав устаревшие термины и добавив условный оператор if:
<div id='discourse-comments'></div>
<meta name="discourse-username" content="ForumAdminName">
<script type="text/javascript">
if (window.location.pathname.indexOf('/p/') < 0) {
DiscourseEmbed = {
discourseUrl: 'https://forum.test.com/',
discourseEmbedUrl: '{{url absolute="true"}}',
// className: 'CLASS_NAME',
};
(function() {
var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
})();
}
</script>
Кроме того, добавил https://www.test.com и https://test.com в настройку src политики безопасности контента (CSP) сайта Discourse, которая находится в разделе администратора Discourse > вкладка «Настройки».
Примечание — по моему опыту, при частом обновлении страницы на маленьком дроплете результаты могут не отображаться примерно 30 секунд, поэтому давайте каждому перезапуску Ghost и редактированию в панели администратора Discourse немного времени для применения изменений.
Дополнительное примечание — при первом проверке раздела комментариев любой статьи наблюдается значительная задержка. @simon рекомендует всегда сначала проверять статью самостоятельно, чтобы у Discourse было время сгенерировать раздел комментариев, связанный с публикацией на форуме.
Ещё раз спасибо всем, очень помогли. Многие комментаторы на YouTube в видеоуроке, который я смотрел, сталкивались с теми же проблемами, что и я, и ссылались на инструкции по интеграции Discourse и Ghost. Ссылки на YouTube могут быть устаревшими, поэтому эта помощь была очень кстати.