Я добавляю ещё один блок IF для другого типа пользовательского поста по адресу WP Discourse: advanced custom filter for discourse_publish_format_html - #12 by Kayla … это тот же тип поста, который я хотел ограничить конкретной темой на Discourse и автоматически публиковать согласно моей недавней теме Filtering the available categories for a custom post type. Посты автоматически публикуются в нужной теме, но пользовательские поля, которые я пытаюсь включить в discourse_publish_format_html, приходят пустыми. Я четырежды проверил все имена полей, и, похоже, в Discourse передаются всё, кроме самих значений полей.
Интересно, может ли одна из этих причин быть виновником?
CPT создан в WordPress с помощью плагина Gravity Forms Advanced Post Creation Add-On.
К CPT применён Toolset Access, поэтому только редакторы могут видеть эти посты; статус WP — опубликовано.
CPT публикуется в приватную категорию Discourse.
В Discourse передаются только заголовок поста/темы, {author} и {blogurl}. Возможно, ключ в том, что {excerpt} также возвращает пустое значение, как и пользовательские поля?
Обновление: полное отключение доступа к Toolset и/или создание записи через WordPress вместо Gravity Form не устранило проблему с пустыми пользовательскими полями. С другой стороны, {excerpt} начал передаваться корректно.
Для уточнения: Toolset Access, похоже, не влияет на это отличие с {excerpt}.
Если я создаю запись через админку WordPress, {excerpt} отображается (запись использует редактор блоков). {excerpt} публикуется как пустой, если запись создана через Gravity Form (который создает «классический» блок для удержания поля WYSIWYG).
Пользовательские поля (однострочное, многострочное и числовое) по-прежнему возвращают пустое значение, независимо от способа создания записи.
Если сообщение об «успехе» не отображается, но сообщение было опубликовано, то проблема в конфигурации пользовательского типа сообщения.
Если сообщение об «успехе» отображается, пользовательские поля должны быть доступны как метаданные сообщения, которые можно получить с помощью get_post_meta( $post_id, 'your_meta_key_name', true );. Самый простой способ понять, что происходит, — записать информацию в файл debug.log из вашей функции cosmos_custom_publish_format_html.
На этой неделе я отсутствую на работе, поэтому могу отвечать на вопросы медленнее, чем обычно.
Наконец, я сузил круг поиска: проблема, похоже, кроется в опции автоматической публикации (это тоже новый фактор, который был упущен). Если я снимаю эту галочку, публикую пост в WordPress, а затем публикую его в Discourse, пользовательские поля передаются в Discourse и отображаются как положено. Или, если я позволяю произойти автоматической публикации, поля появятся в Discourse после нажатия кнопки «Обновить тему Discourse» в WordPress. Похоже, что при автоматической публикации пост публикуется до того, как данные в пользовательских полях будут корректно сохранены в WordPress.