# Несколько сайтов Discourse на одном WordPress с wp-discourse

**URL:** https://meta.discourse.org/t/multiple-discourse-sites-on-single-wordpress-with-wp-discourse/270316
**Category:** Support
**Tags:** wordpress
**Created:** [02.Июль.2023 17:42:55 UTC](https://meta.discourse.org/t/multiple-discourse-sites-on-single-wordpress-with-wp-discourse/270316 "2023-07-02T17:42:55Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [02.Июль.2023 17:42:55 UTC](https://meta.discourse.org/t/multiple-discourse-sites-on-single-wordpress-with-wp-discourse/270316/1 "2023-07-02T17:42:55Z")

</div>

У меня есть клиент с сайтом на WordPress, который управляет подписками и форумом, подключенным через wp-discourse. Всё работает отлично.

Однако теперь он хочет добавить дополнительные сайты Discourse, которые будут аутентифицироваться через единый сайт WordPress. Я попытался скопировать настройку с первого сайта Discourse на второй, но WordPress перенаправляет на первый сайт Discourse. Затем я подумал, что, возможно, можно сделать первый сайт Discourse сервером discourse\_connect для второго, но это тоже не сработало (он также перенаправляет на первый сайт Discourse, и на втором сайте вход не выполняется).

Существует ли способ настроить единый сайт WordPress, который обеспечивает аутентификацию для нескольких сайтов Discourse?

---

<div class="post-metadata">

### Author: ![volanar](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/volanar/32/318163_2.png) [@volanar](https://meta.discourse.org/u/volanar)
#### Post date: [02.Июль.2023 18:12:51 UTC](https://meta.discourse.org/t/multiple-discourse-sites-on-single-wordpress-with-wp-discourse/270316/2 "2023-07-02T18:12:51Z")

</div>

Если вы планируете использовать единый вход для более чем двух платформ, то наиболее правильным решением будет использование [keycloak](https://www.keycloak.org/).  
Этот подход хорош тем, что нам не нужно думать о сервере единого входа, а также упрощается вход через социальные сети (и не только).  
Вы можете добавлять и удалять любые сайты, не теряя пользователей.

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [02.Июль.2023 21:13:18 UTC](https://meta.discourse.org/t/multiple-discourse-sites-on-single-wordpress-with-wp-discourse/270316/3 "2023-07-02T21:13:18Z")

</div>

> [@pfaffman](#):
>
> Существует ли способ настроить один сайт WordPress, который обеспечивает аутентификацию для нескольких сайтов Discourse?

Плагин [WP Discourse](https://github.com/discourse/wp-discourse) не предназначен для работы в таком сценарии, но это должно быть возможно.

> [@pfaffman](#):
>
> Я попытался скопировать настройки с первого сайта Discourse на второй, но WordPress перенаправляет на первый сайт Discourse.

Я бы начал с добавления параметра URL `site` в настройку `discourse_connect_url` для Discourse. В WordPress используйте параметр `site`, чтобы указать правильный сайт Discourse для перенаправления здесь:

> <https://github.com/discourse/wp-discourse/blob/main/lib/sso-provider/discourse-sso.php#L168>

Вам также, вероятно, потребуется обработать вызов `sync_sso`, который происходит здесь: [wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub](https://github.com/discourse/wp-discourse/blob/main/lib/sso-provider/discourse-sso.php#L45)

Я не уверен в этом, но возможно, вам нужно будет добавить `site` в список разрешённых переменных запроса в этой функции (чтобы WordPress не удалял этот параметр): [wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub](https://github.com/discourse/wp-discourse/blob/main/lib/sso-provider/discourse-sso.php#L45)

В идеале вышеуказанные изменения можно было бы реализовать с помощью хуков `action` и `filter` в WordPress. Похоже, что для этого потребуется добавить хуки непосредственно в код.

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

Дам знать, если вспомню какие-либо другие проблемы.

Редактирование: нужно подумать о том, как идентификатор пользователя Discourse используется в WordPress, чтобы убедиться, что не возникнет конфликтов между несколькими сайтами — один пользователь в WordPress потенциально может иметь учётные записи на нескольких сайтах WordPress. У них будет разный идентификатор пользователя Discourse на каждом сайте.

Редактирование: самая большая проблема, которую я вижу, возникает, если в настройках сайтов WordPress включена опция «Создавать или синхронизировать пользователей Discourse при входе». При этом выполняется вызов API к маршруту `sync_sso` в Discourse. Вам потребуется способ определить, на какой сайт Discourse следует выполнить синхронизацию или создать пользователя. Также вам понадобится ключ API Discourse для каждого сайта. Это кажется выполнимым, но добавит определённой сложности.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [12.Июль.2023 21:03:46 UTC](https://meta.discourse.org/t/multiple-discourse-sites-on-single-wordpress-with-wp-discourse/270316/4 "2023-07-12T21:03:46Z")

</div>

Звучит как что-то возможное. Да, его не интересует публикация, только аутентификация и, полагаю, синхронизация групп из WooCommerce или аналогичных систем.

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [12.Июль.2023 22:19:34 UTC](https://meta.discourse.org/t/multiple-discourse-sites-on-single-wordpress-with-wp-discourse/270316/5 "2023-07-12T22:19:34Z")

</div>

> [@pfaffman](#):
>
> Я полагаю, речь идёт о передаче групп из WooCommerce или аналогичных систем.

Судя по всему, имеется в виду изменение членства пользователя в группах на конкретном сайте Discourse при совершении им покупки на сайте WordPress. Это выполнимо, но лучше всего реализовать через API-запрос к маршруту `sync_sso`. Плагин [WP Discourse](https://github.com/discourse/wp-discourse) содержит функции, которые можно использовать для этого, однако они применяют URL сайта Discourse и API-ключ, указанные на страницах настроек плагина: [https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L278-L326](https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L278-L326). Возможно, в плагин можно добавить фильтры для этих параметров, чтобы их можно было устанавливать условно.

---

<div class="post-metadata">

### Author: ![uffehe](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/uffehe/32/208266_2.png) [@uffehe](https://meta.discourse.org/u/uffehe)
#### Post date: [13.Август.2023 20:37:05 UTC](https://meta.discourse.org/t/multiple-discourse-sites-on-single-wordpress-with-wp-discourse/270316/6 "2023-08-13T20:37:05Z")

</div>

> [@Jay Pfaffman](#):
>
> Да, ему не важно размещение, только аутентификация и, полагаю, синхронизация групп из WooCommerce или аналогичных систем.

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

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [13.Август.2023 23:03:15 UTC](https://meta.discourse.org/t/multiple-discourse-sites-on-single-wordpress-with-wp-discourse/270316/7 "2023-08-13T23:03:15Z")

</div>

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

Если у вас есть бюджет, это может помочь.

---

<div class="post-metadata">

### Author: ![uffehe](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/uffehe/32/208266_2.png) [@uffehe](https://meta.discourse.org/u/uffehe)
#### Post date: [14.Август.2023 20:39:33 UTC](https://meta.discourse.org/t/multiple-discourse-sites-on-single-wordpress-with-wp-discourse/270316/8 "2023-08-14T20:39:33Z")

</div>

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