Я использовал скрипт Discourse и перенёс данные из phpBB в Discourse. Теперь я переместил свой сайт на WordPress и мне нужно перенести некоторые данные пользователей. Я создал пользовательские поля в Discourse и использовал хук wpdc_sso_params для миграции данных из этих полей.
Однако проблема в том, что данные синхронизируются только при входе пользователя в систему. Если пользователь больше не входит в систему или его сессия истекла, его данные не будут перенесены таким образом.
Существует ли хук или скрипт, который позволил бы перенести данные всех пользователей сразу?
Кроме того, при сопоставлении пользовательских полей, как можно сопоставить полное имя с полями «Имя» и «Фамилия»? Например, мы можем установить пользовательскую аватарку, используя хук wpdc_sso_avatar_url.
Если плагин WP Discourse активирован на вашем сайте WordPress, вы можете написать скрипт, который переберет всех пользователей вашего сайта и вызовет функцию sync_sso_record с параметрами SSO для каждого пользователя, которого нужно обновить:
Прошло уже довольно много времени с тех пор, как я пытался это сделать. Протестируйте сначала на одном пользователе, прежде чем запускать цикл для всех пользователей сайта.
Вы можете использовать поле external_name в Discourse для полного имени. Значение, заданное в поле external_name, станет именем пользователя в Discourse. Если вам нужны отдельные поля для имени и фамилии, вам придется создать для них пользовательские поля в Discourse.
Дайте знать, если возникнут какие-либо проблемы. Я смогу попробовать протестировать это завтра.
@simon
У меня возникает фатальная ошибка при использовании
WPDiscourse\Utilities\PublicPluginUtilities::sync_sso_record($sso_params_array, $myuser->ID);
PHP Fatal error: Uncaught Error: Call to undefined method WPDiscourse\Utilities\PublicPluginUtilities::sync_sso_record()
Плагин wp discourse активен, и SSO работает корректно.
Я попробовал
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
DiscourseUtilities::sync_sso_record($sso_params, 3992);
В этом случае фатальной ошибки нет, но данные пользовательских полей не сохраняются в Discourse.
Получаю следующую ошибку:
WP_Error Object ( [errors] => Array ( [wpdc_response_error] => Array ( [0] => An invalid response was returned from Discourse ) ) [error_data] => Array ( [wpdc_response_error] => Array ( [http_code] => 422 [http_body] => {“failed”:“FAILED”,“message”:“The external_id is required but was blank”} ) ) [additional_data:protected] => Array ( ) )
Здесь каждый делает всё возможное, чтобы помочь решить проблемы. Симон помогает вам и автоматически получает уведомления о новых ответах, если он не отключил их.
Поэтому нет необходимости упоминать его через @mention и поднимать тему, особенно после ожидания менее 3 часов. Пожалуйста, будьте терпеливы в этом вопросе
{"failed":"FAILED","message":"The external_id is required but was blank"}
Вам необходимо установить параметр external_id в вашем массиве $sso_params_array. Значение external_id должно соответствовать ID пользователя в WordPress.