Идея для более экономных комментариев?

В настоящее время механизм связи между WordPress и Discourse работает так: каждая статья автоматически переносится в Discourse как скрытая. То есть даже те, по которым не ведётся обсуждение.

Это очень ресурсоёмко, так как в WordPress создаётся множество «пустых» тем.

Может, кто-нибудь предложит решение, чтобы переносить из WP в Discourse только те статьи, по которым уже началось обсуждение?

Привет @Petr_Mišák,

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

Тем не менее, мне приходит в голову, что когда мы добавим возможность для участников категорий Discourse подписываться на других акторов ActivityPub в плагин ActivityPub (над которым я сейчас работаю), вы, возможно, сможете настроить плагин WordPress ActivityPub определённым образом, чтобы добиться этого. Хотя это довольно спекулятивно.

Также мне хотелось бы чуть лучше понять, почему вы считаете это «ресурсоёмким». Если вы публикуете много статей, которые не получают отклика, возможно, стоит публиковать на форуме только часть статей, которые с большей вероятностью вызовут интерес? И наоборот: мешает ли большое количество встроенных тем без ответов вашему сообществу так, как вы наблюдали? Возможно, есть способ решить саму корневую проблему, так сказать?

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

Сколько публикаций на вашем сайте WordPress? Часто ли получают комментарии старые посты, или люди обычно комментируют только новые?

Что касается решений этой проблемы: готовы ли вы рассмотреть вариант, требующий добавления пользовательского кода на сайт WordPress, или вас интересуют только способы, не требующие никакого кастомного кода?

Если посты на сайте обычно получают комментарии лишь в течение короткого периода после публикации, самое простое решение — начать переносить в Discourse только самые свежие публикации сайта.

Следующий по простоте вариант — установить на сайт плагин, который модифицирует ссылку «Начать обсуждение» плагина WP Discourse. Вместо ссылки на тему в Discourse она должна была бы запускать публикацию поста в Discourse через плагин WP Discourse. Самая сложная часть реализации — определить, как обрабатывать случай, когда пользователь впервые нажимает на ссылку «Начать обсуждение»: должны ли они автоматически перенаправляться на тему после её публикации, что они увидят во время публикации и т. д.

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

Пустые темы не потребляют много ресурсов. Вы говорите о десятках или сотнях тысяч?

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

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

Меня сильно беспокоит то, что связь между статьёй WordPress и комментариями в Discourse устанавливается в момент публикации статьи, а не тогда, когда кто-то проявляет интерес к обсуждению темы.

Учитывая, что только 10% всех статей получают комментарии, а плагин WordPress создаёт ссылку в Discourse для каждой опубликованной статьи. Таким образом, 90% созданных таким образом ссылок остаются скрытыми и просто занимают ресурсы впустую.

Мы публикуем около 13 статей каждый день. То есть 13 * 365 = 4 745 статей в год. Из них 4 270 будут созданы как скрытые темы в системе Discourse, к которым никогда не будет добавлено ни одного комментария. За 10 лет это получится 42 700 мусорных тем.

Решение заключалось бы в том, чтобы скрытая тема в Discourse создавалась не в момент публикации статьи в WordPress, а только тогда, когда кто-то в WordPress под статьёй проявляет интерес к её обсуждению.

Таким образом, не было бы необходимости создавать скрытые и неиспользуемые ветки в Discourse.

Точно так, как вы и говорите: у нас очень посещаемый сайт на WordPress, но мы полностью переносим учётные записи пользователей, логины и комментарии к статьям на Discourse. WordPress станет просто «клиентом DiscourseConnect».

Мы публикуем около 13 статей в день :slight_smile:

Люди обычно комментируют новые статьи, но нередки случаи, когда обсуждение разворачивается вокруг более старых публикаций. Мы стараемся обновлять статьи несколько раз после их публикации. А добавление новой информации в статью может вновь разжечь дискуссию.

Мы готовы добавить фрагмент кода в WordPress.

Используя текущий плагин WordPress для Discourse, мы планируем добавлять в Discourse только новые статьи, опубликованные после 1 ноября 2023 года, но это создаст тысячи неиспользуемых тем в Discourse. Кроме того, если кто-то захочет прокомментировать статью 2015 года, у него не будет такой возможности, поскольку тема в Discourse не будет существовать.

Было бы здорово, если бы тема создавалась только тогда, когда пользователь нажимает кнопку «Начать обсуждение под статьёй».

Как я примерно представляю весь процесс? Приведу иллюстративный, но вымышленный пример.

  • В WordPress у нас есть черновик статьи, например www.SvetAndroida.cz/android-telefony-2023
  • мы публикуем статью
  • пока ничего не передаётся в Discourse

Затем кто-то нажимает кнопку «Начать обсуждение» под статьёй в WordPress

  • в этот момент WordPress обращается к Discourse, чтобы создать тему по адресу komunita.SvetAndroida.cz/android-telefony-2023
  • после создания темы пользователь перенаправляется в Discourse, чтобы оставить первый комментарий

Если кто-то на той же статье в WordPress захочет «добавить комментарий» (ещё один комментарий)

  • он больше не будет вызывать Discourse для создания темы
  • а при нажатии кнопки пользователь сразу попадёт в Discourse
  • либо кнопку «добавить комментарий» больше не нужно обрабатывать через JavaScript, так как тема уже существует; в таком случае кнопка может быть просто HTML-ссылкой, что лучше с точки зрения SEO

Использование JavaScript было бы необходимо только для создания новой темы в Discourse, если кто-то нажмёт «Начать обсуждение» и захочет добавить первый комментарий.

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

В нашем случае это будет около 50 000 тем за 10 лет

Это не так уж важно, но вы можете раз в год удалять те, которым несколько лет.

Их было бы логично очистить, но мы стараемся обновлять старые статьи и активировать обсуждение спустя некоторое время после публикации. Поэтому удаление в нашем случае не является идеальным решением. …

Всё это имеет смысл, особенно при работе с ранее опубликованными статьями. Моя единственная озабоченность заключается в том, что использование пользовательского кода добавит некоторую сложность в интеграцию WordPress и Discourse. Однако, думаю, всё будет в порядке. Убедитесь, что ваши разработчики используют хуки действий и фильтров плагина WP Discourse и не редактируют код самого плагина. Им нужно будет понять, как вызывать публичный метод sync_to_discourse при клике на ссылку «Начать обсуждение»: wp-discourse/lib/sso-client/sso-client-base.php at main · discourse/wp-discourse · GitHub. При публикации через этот метод все соответствующие метаданные будут добавлены к записи в WordPress.

Это замечательно! Возможно, стоит посмотреть на этот сайт Discourse: boing - Boing Boing BBS. Они используют плагин WordPress для публикации примерно такого же количества статей в Discourse. В их случае все новые статьи автоматически публикуются в Discourse. Однако они не публиковали в Discourse статьи, созданные в WordPress до настройки сайта Discourse.

Есть ли на этом форуме подходящее место, где я мог бы найти разработчика для доработки плагина WordPress для Discourse, как описано выше?

Спасибо, вы были очень быстры. Я изначально искал это в категориях, но не мог найти там. Это меня удивило. Но поиск помог.

Спасибо за подробный ответ, Петр, однако я немного запутался.

Как кто-то может выразить интерес к обсуждению статьи, если вы не хотите использовать комментарии WordPress и темы для неё ещё нет в Discourse?

*edit Ах, я вижу, вы описали UX

Да, это вполне реализуемо.

Подумав об этом сейчас, я считаю, что в плагине есть небольшой пробел: у нас нет более простого способа сделать это. Мне кажется логичным добавить вспомогательную функцию, а также шорткод и блок, которые будут с ней связаны. Я изучу этот вопрос для выпуска после текущего.

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

Я начну работу над этим на следующей неделе, чтобы включить это в версию 2.5.1 (выпуск после следующего). @Petr_Mišák Вы сможете использовать это для достижения своей цели.

Отлично, я с нетерпением жду этого. У нас уже развернут Discourse на основном сайте https://www.svetandroida.cz/