カスタム投稿タイプの公開が空白になる問題のデバッグ

WP Discourse: advanced custom filter for discourse_publish_format_html - #12 by Kayla に、別のカスタム投稿タイプ用の IF セクションを追加しています。これは、最近のトピック Filtering the available categories for a custom post type で述べたように、特定の Discourse トピックに制限し、自動的に公開したいと同じ投稿タイプです。投稿は正しくトピックに自動公開されていますが、discourse_publish_format_html に含めようとしているカスタムフィールドが空で渡されてしまいます。フィールド名を四重に確認しましたが、フィールド値自体以外はすべて Discourse に渡されているようです。

以下の要因が原因である可能性はありますか?

  1. CPT は、Gravity Forms Advanced Post Creation Add-On プラグインを介して WordPress で作成されています。
  2. CPT には Toolset Access が適用されており、エディターのみがこれらの特定の投稿を表示できます。WP のステータスは「公開済み」です。
  3. CPT はプライベートな Discourse カテゴリに公開されています。

Discourse に渡されているのは、投稿/トピックのタイトル、{author}、{blogurl} です。もしかすると、{excerpt} もカスタムフィールドと同様に空を返していることが鍵でしょうか?

更新:ツールセットアクセスの完全無効化、または Gravity フォームではなく WordPress 経由での投稿作成を行っても、カスタムフィールドが空白になる問題は解決しませんでした。一方、{excerpt} は表示されるようになりました…

明確にするため申し上げますが、Toolset Access は {excerpt} とのこの差異には関係していないようです。

WP 管理画面から投稿を作成すると、{excerpt} は反映されます(投稿はブロックエディターを使用しています)。一方、Gravity Form から作成すると(WYSIWYG フィールドを保持する「クラシック」ブロックを作成するため)、{excerpt} は空白のまま公開されます。

カスタムフィールド(単一行、複数行、数値)は、投稿の作成方法に関わらず、常に空白のまま返されます。

投稿を公開した後、エディターの Discourse サイドバーに以下のような通知が表示されていますか?

「success」メッセージが表示されていないのに投稿が公開されている場合は、カスタム投稿タイプの設定に問題があります。

「success」メッセージが表示されている場合、カスタムフィールドは get_post_meta( $post_id, 'your_meta_key_name', true ); で取得可能な投稿メタデータとして利用できます。何が起きているかを確認する最も簡単な方法は、cosmos_custom_publish_format_html 関数から debug.log ファイルに書き込むことです。

今週は仕事から離れているため、通常よりも回答が遅くなる可能性があります。

ついに特定できました:問題は自動公開オプション(これも見落としていた新たな要因)から来ているようです。このオプションのチェックを外して、まず WordPress で投稿を公開し、その後に Discourse に公開すると、カスタムフィールドが Discourse に引き継がれ、正しく表示されます。あるいは、自動公開を許可した場合でも、WordPress で「Discourse トピックを更新」をクリックすれば、フィールドは Discourse に表示されます。つまり、自動公開が行われると、カスタムフィールドのデータが WordPress で正しく保存される前に投稿が公開されてしまうようです。