У меня возникла проблема с плагином Discourse для WordPress при попытке опубликовать пост WordPress на Discourse.
Описание проблемы:
Когда я создаю новый пост на сайте WordPress и перед публикацией отмечаю опцию «Опубликовать на Discourse» на вкладке Discourse, пост успешно публикуется на WordPress. Однако тема на Discourse в этот момент не создается.
Позже, если я отредактирую тот же пост, снова перейду на вкладку Discourse, нажму «Новая тема» и опубликую его на Discourse, пост будет создан на сайте Discourse. Но эта тема на Discourse не связана с исходным постом WordPress. Нет ассоциации постоянных ссылок (permalink) или метаданных, сохраненных обратно в пост.
Результаты отладки:
В процессе отладки я заметил, что вызов: /wp-json/wp-discourse/v1/publish-topic
Как видите, поле «permalink» пустое. Это, по-видимому, основная причина, по которой тема на Discourse создается, но не связывается обратно с постом WordPress (то есть permalink не сохраняется в postmeta, поэтому связь между WP и Discourse нарушена).
Пожалуйста, помогите разобраться, почему в ответе API возвращается пустой permalink. Это ошибка конфигурации плагина или баг в рабочем процессе публикации?
Дайте знать, если понадобятся логи или дополнительная информация. Благодарю за помощь!
Привет @techops, не могли бы вы предоставить соответствующие логи из раздела WP Discourse → Логи в WordPress? Также, если возможно, поделитесь мета-файлом из этого представления.
Спасибо за предоставленную информацию. Судя по логам, всё выглядит нормально. Я вижу, что после публикации записи в WordPress создаётся тема в Discourse. Не могли бы вы уточнить, в чём именно заключается проблема? Пожалуйста, опишите её следующим образом:
Я пишу запись в WordPress.
После публикации записи я ожидаю увидеть…
На данном этапе постарайтесь не делать никаких технических предположений. Спасибо!
Привет, Энгус,
Я создал пост в WordPress.
После публикации поста я ожидаю следующего поведения:
Когда отмечена галочка под «Опубликовать в Discourse», правильное поведение заключается в том, что в Discourse создается пост, и он должен быть связан с постом в WordPress.
Однако на самом деле пост создается в Discourse, но связь сразу же теряется. Затем её приходится воссоздавать вручную.
Спасибо, не могли бы вы также подтвердить следующее:
Какой редактор записей WordPress вы используете? Классический или Гутенберг? Создаются ли эти записи нестандартным способом (например, я вижу, что вы используете «Gravity Forms Advanced Post Creation»)?
Можете ли вы привести пример записи WordPress и темы Discourse, где возникает эта проблема?
Используете ли вы какие-либо плагины, изменяющие мета-поля WordPress (например, Advanced Custom Fields)?
Мы используем редактор Gutenberg для создания публикаций.
Мы не используем никаких плагинов для пользовательских полей, таких как Advanced Custom Fields.
Я записал видео, воспроизводящее проблему, для вашего ознакомления. Вы можете посмотреть его здесь.
Дайте знать, если потребуется дополнительная информация или дальнейшее тестирование.
Если это поможет, я также могу предоставить временный доступ к аккаунту, чтобы вы могли изучить настройку напрямую.
Можете ли вы попробовать опубликовать посты без этого пользовательского рабочего процесса? Чтобы разобраться в этом, мы будем использовать метод исключения. Скорее всего, одно из ваших пользовательских решений несовместимо с функциями публикации WP Discourse.
Спасибо за предложение.
Я протестировал публикацию постов напрямую, без использования пользовательского рабочего процесса, но, к сожалению, это всё равно не работает.
Хорошо, продолжайте в том же духе. Одна из ваших настроек, скорее всего, мешает плагину WP Discourse сохранять post_id и постоянную ссылку при публикации темы.
Я нашел причину конфликта: плагин SmartCrawl SEO вступает в противоречие с WP Discourse. После деактивации SmartCrawl посты публикуются в Discourse, как и ожидалось, и корректно ссылаются на соответствующие записи WordPress.
Отлично, что вы нашли виновника. На данном этапе, пожалуй, стоит обратиться в их службу поддержки с сообщением вроде: «Ваш плагин, похоже, мешает другому плагику использовать стандартные API WordPress…», после чего описать проблему. Вы также можете дать им ссылку на эту тему.