Как лучше всего интегрировать Discourse для крупного WordPress-журнала?

Привет. Привет,

Я веду крупный онлайн-журнал, посвященный технологиям, https://www.svetandroida.cz/, и в прошлом мы пытались внедрить для наших пользователей различные функции сообщества (уведомления, отзывы пользователей, карма и т. д.). Однако WordPress не поддерживает эти функции нативно, а сторонние решения со временем неизбежно начинают давать сбои.

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

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

Факты:

  • Журнал на WordPress работает по адресу https://www.svetandroida.cz/
  • Мы размещаем сообщество Discourse здесь: https://komunita.svetandroida.cz/
  • Мы хотим использовать Discourse для управления учетными записями пользователей, так как считаем это лучшим решением.
  • Мы публикуем от 5 до 15 статей каждый день.
  • У нас десятки тысяч статей (и мы уже удалили многие из них :)).
  • Активно комментируют от десятков до нескольких сотен пользователей.
  • У нас установлен плагин WordPress для Discourse, и всё, кажется, работает отлично; единственное, что мы еще не настроили, — это SSO.
  • Статьи, которые мы публикуем в журнале WordPress, автоматически публикуются в Discourse как скрытые.

Что мне нужно решить и как это сделать? Можете ли вы предложить лучшее решение?

Вход в систему пользователей
С помощью плагинов WordPress я настрою клиент DiscourseConnect и надеюсь, что он не сломается и не заблокирует доступ для моих редакторов :). Надеюсь, что нет. Шучу, но правда в том, что это единственный момент, в котором, даже после тщательного изучения обсуждений, я до сих пор не уверен на 100%.

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

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

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

Поэтому уже опубликованные комментарии останутся в WordPress, а новые будут публиковаться в Discourse.

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

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

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

Так на форуме не будет тысяч невидимых тем.

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

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

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

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

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

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

Дайте знать, если различие между использованием WordPress в качестве клиента DiscourseConnect и провайдера DiscourseConnect остаётся для вас неясным.

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

Это может быть возможно. Моё ощущение таково, что это может привести к проблемам.

На вашем сайте Discourse вы можете фильтровать темы, не включённые в список, добавив к URL следующую строку запроса: ?status=listed. Например, https://meta.discourse.org/latest?status=listed. Существует готовый компонент темы, который можно использовать для переключения между просмотром «открытых» и «закрытых» тем: Topic Status Filter. Если его ещё нет, будет довольно легко добавить статусы «включённые» и «невключённые» к этому фильтру. Но, полагаю, в таком случае фильтр должны видеть только сотрудники.

Это можно реализовать из WordPress с помощью API-запроса, который обрабатывается задачей cron.

Спасибо за ваше время и ответ.

Что касается DiscourseConnect, мне уже всё понятно, спасибо за подробное объяснение. Давайте настроим DiscourseConnect в WordPress как клиент.

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

Но дискуссии, основанные на опубликованных статьях, всё ещё не дают мне покоя :). Фильтр действительно решает проблему, когда администратор не видит «скрытые» темы, но я не могу отказаться от мысли, что, возможно, существует другой способ.

Вы упомянули, что это может привести к проблемам. Не могли бы вы перечислить некоторые проблемные сценарии, которые вас беспокоят?

С помощью API, вероятно, это можно решить, но так как мы не программисты, мне трудно представить, как именно это будет работать.

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

Проблемы, которые я вижу:

  • На что указывает ссылка, если пост ещё не опубликован? URL темы в Discourse становится известен только после её публикации. Необходимо разработать механизм, при котором при клике пользователя тема публикуется в фоновом режиме, а затем, на основе ответа от Discourse, пользователь перенаправляется на эту тему.

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

Редактирование: один из способов решить первую проблему — просто уведомить пользователя о происходящем и отобразить сообщение «Пожалуйста, подождите, пока мы публикуем тему». После публикации темы можно сгенерировать ссылку на неё и предложить пользователю перейти по ней. Процесс может занять несколько секунд.

Так что всё это могло бы сводиться к небольшому JavaScript-скрипту, который размещал бы обычную ссылку для участия в обсуждении под статьёй на сайте WordPress. Сначала JavaScript вызывал бы функцию (создание темы на Discourse, что уже делает плагин для WP) и показывал пользователю, что тема создаётся, а когда JavaScript получал от Discourse информацию о том, что тема создана, он перенаправлял бы пользователя в ветку комментариев на Discourse.

Я всё правильно понял или слишком упрощаю? :slight_smile:

Было бы проще не перенаправлять пользователя автоматически, но да, то, что вы описали, верно. После того как пользователь нажмёт ссылку для создания темы, скрипт будет периодически отправлять запросы для получения URL темы с сервера WordPress. Как только URL будет получен, пользователь будет перенаправлен на тему в Discourse.