Пост не был корректно опубликован в Discourse — отсутствует постоянная ссылка в ответе API

У меня возникла проблема с плагином Discourse для WordPress при попытке опубликовать пост WordPress на Discourse.

Описание проблемы:

Когда я создаю новый пост на сайте WordPress и перед публикацией отмечаю опцию «Опубликовать на Discourse» на вкладке Discourse, пост успешно публикуется на WordPress. Однако тема на Discourse в этот момент не создается.

Позже, если я отредактирую тот же пост, снова перейду на вкладку Discourse, нажму «Новая тема» и опубликую его на Discourse, пост будет создан на сайте Discourse. Но эта тема на Discourse не связана с исходным постом WordPress. Нет ассоциации постоянных ссылок (permalink) или метаданных, сохраненных обратно в пост.

Результаты отладки:

В процессе отладки я заметил, что вызов:
/wp-json/wp-discourse/v1/publish-topic

возвращает следующий ответ:

{
“publish_response”: “success”,
“permalink”: “”
}

Как видите, поле «permalink» пустое. Это, по-видимому, основная причина, по которой тема на Discourse создается, но не связывается обратно с постом WordPress (то есть permalink не сохраняется в postmeta, поэтому связь между WP и Discourse нарушена).

Пожалуйста, помогите разобраться, почему в ответе API возвращается пустой permalink. Это ошибка конфигурации плагина или баг в рабочем процессе публикации?

Дайте знать, если понадобятся логи или дополнительная информация. Благодарю за помощь!

Привет @techops, не могли бы вы предоставить соответствующие логи из раздела WP Discourse → Логи в WordPress? Также, если возможно, поделитесь мета-файлом из этого представления.

Привет, Энгус,

Спасибо за быстрый ответ.

В панели управления WordPress в разделе WP Discourse > Логи логов нет — представление логов в данный момент пустое.

Однако вот метафайл, который вы запросили: Discourse meta - Google Docs

Дайте знать, если потребуется что-то ещё для диагностики этой проблемы.

Спасибо!

Спасибо, @techops, я бы хотел сделать несколько вещей.

Пожалуйста, отключите этот параметр в настройках публикации:

Отправлять уведомление по электронной почте при сбое публикации

Пожалуйста, убедитесь, что этот параметр включен в настройках публикации:

Подробные журналы публикации

У вас настроено несколько типов публикаций:

post, event, groups, collections, podcast

С каким типом публикации у вас возникла эта проблема? Если это не post, могли бы вы немного подробнее объяснить, как настроен этот тип публикации?

Привет, Энгус,

Я применил предложенные настройки:

  • Отключено: Отправлять уведомление по электронной почте при сбое публикации
  • Включено: Подробные журналы публикации

Я использую только тип поста post.

После обновления настроек я создал и опубликовал новый пост на Discourse. Вот сгенерированные журналы:

[2025-04-22 15:58:12] publish.INFO: create_post.post_success {"wp_title":"test post 4","wp_author_id":"221","wp_post_id":15068} 
[2025-04-22 15:58:12] publish.INFO: create_post.body_valid {"wp_title":"test post 4","wp_author_id":"221","wp_post_id":15068} 
[2025-04-22 15:58:12] publish.INFO: create_post.after_publish {"post_id":15068,"remote_post_type":"create_post","discourse_post_id":"","discourse_topic_id":"6910","discourse_permalink":""} 

Дайте знать, если потребуется дополнительная информация или детали.

Спасибо!

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

  1. Я пишу запись в WordPress.
  2. После публикации записи я ожидаю увидеть…

На данном этапе постарайтесь не делать никаких технических предположений. Спасибо!

Привет, Энгус,
Я создал пост в WordPress.
После публикации поста я ожидаю следующего поведения:

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

Однако на самом деле пост создается в Discourse, но связь сразу же теряется. Затем её приходится воссоздавать вручную.

Спасибо!

Спасибо, не могли бы вы также подтвердить следующее:

  1. Какой редактор записей WordPress вы используете? Классический или Гутенберг? Создаются ли эти записи нестандартным способом (например, я вижу, что вы используете «Gravity Forms Advanced Post Creation»)?
  2. Можете ли вы привести пример записи WordPress и темы Discourse, где возникает эта проблема?
  3. Используете ли вы какие-либо плагины, изменяющие мета-поля WordPress (например, Advanced Custom Fields)?

Спасибо за уточнение. Вот детали:

  • Мы используем редактор Gutenberg для создания публикаций.
  • Мы не используем никаких плагинов для пользовательских полей, таких как Advanced Custom Fields.
  • Я записал видео, воспроизводящее проблему, для вашего ознакомления. Вы можете посмотреть его здесь.

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

Спасибо!

Спасибо за запись видео. Похоже, вы используете пользовательский рабочий процесс публикации для размещения постов.

Это может быть связано с проблемой.

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

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

Хорошо, продолжайте в том же духе. Одна из ваших настроек, скорее всего, мешает плагину WP Discourse сохранять post_id и постоянную ссылку при публикации темы.

Спасибо, Ангус.

Я нашел причину конфликта: плагин SmartCrawl SEO вступает в противоречие с WP Discourse. После деактивации SmartCrawl посты публикуются в Discourse, как и ожидалось, и корректно ссылаются на соответствующие записи WordPress.

Отлично, что вы нашли виновника. На данном этапе, пожалуй, стоит обратиться в их службу поддержки с сообщением вроде: «Ваш плагин, похоже, мешает другому плагику использовать стандартные API WordPress…», после чего описать проблему. Вы также можете дать им ссылку на эту тему.