Discourse は WordPress のコメントを具体的にどのように置き換えるのでしょうか?

Discourse を使用しており、WP コメントは使用していません(「Remove WordPress Comments Template」および Ajax がチェックされています)。Discourse に投稿するカスタム投稿タイプに Toolset Access control を設定しており、アクセス制御と整合するプライベートカテゴリに投稿しています。通常、このような制御は投稿コメントの表示にも影響を与えるはずですが、Discourse コメントの表示には影響していません。何かご存知ですか?

ここでさらにいくつかの文脈を追加できるかもしれません。

当社の WordPress サイトには、プライベートなカスタム投稿タイプがあり、その投稿はプライベートな Discourse カテゴリのトピックと連携する必要があります。Discourse カテゴリへのアクセス権を持つユーザーは、WordPress 上の投稿にもアクセスできます。この仕組みを実現するために、WordPress ではこれらのユーザーにエディターロールを割り当て、Discourse ではプライベートカテゴリへのアクセスを付与するグループに所属させています。

認証されていないユーザーが、WordPress の投稿や Discourse のトピックスレッドを閲覧することは、いかなる場合もあってはなりません。これは、それぞれロールとグループのアクセス制御によって意図通りに機能しています。WordPress 側では、上記の通り、Toolset Access を使用してこのカスタム投稿タイプのすべての投稿へのアクセスを制限しています。

しかしながら、Discourse からのプライベートなディスカススレッドは、投稿内容自体が非表示になっているにもかかわらず、WordPress への埋め込みを通じて一般公開されて表示されています。つまり、埋め込まれた Discourse のコメントはアクセス制御によって非表示になっていません。この出力が制御ループの外に置かれてしまう原因と、その修正方法について調査しています。

WP Discourse プラグインは、カスタムコメントテンプレートをロードすることでコメントを表示します。これは WordPress の comments_template フィルターを使用してカスタムテンプレートをロードしています。なぜ Toolset Access Control を投稿タイプに設定しているにもかかわらず、コメントがまだ表示されているのか、私にもはっきりとはわかりません。その件について調査します。

おそらく、このプラグインには、プライベートな Discourse カテゴリに公開された投稿に対してコメントをロードしないというオプションを追加すべきでしょう。これを有効にすると、Discourse のトピックへのリンクのみが表示されるようになります。ただし、それがあなたの直面している問題を解決するかどうかはわかりません。

こんにちは、サイモン。私はこの件について@Kayla と一緒に取り組んでいます。ここで説明されている内容は、私たちの問題を解決するはずです。

また、Discourse のコメントテンプレートを、より細かいアクセス制御に組み込む方法についても知りたいです。よろしくお願いします!

素晴らしい!プラグインの次のアップデートにその機能を含めることに問題はないと思います。今週末までに完了するように努めます。進捗については随時ご連絡いたします。

あなたが直面している問題は、WP Discourse が WordPress の comments_template フィルターフックにフックする際の優先順位に関連していると思われます。WP Discourse プラグインは、このフィルターにフックする関数を呼び出す際に優先順位 20 を使用しています。Toolset プラグインは、保護されたページではコメントテンプレートが読み込まれないようにするため、おそらくより低い優先順位でそのフィルターにフックしているのでしょう。

これについて Toolset に問い合わせたところ、私の予想動作に関する認識が誤っていたことが分かりました。Toolset Access プラグインは、コメントテンプレートに全くフックしていません。制限付きコンテンツでコメントを非表示にするには、toolset_access_api_get_post_permissions フィルターにカスタムコードをフックし、テーマレベルでコメントテンプレートのレンダリングを抑制または許可する処理が必要です。Toolset のコンテンツ制限が、文字通りコンテンツテンプレート自体に関するものであることに気づかなかったことをお詫び申し上げます。:woman_facepalming:

このオプションは、プラグインのバージョン 2.0.7 で追加されました。現在は WordPress リポジトリ で利用可能です。

プラグインの「Enable Discourse Comments」オプションを選択すると、コメントの表示タイプとして以下の 3 つのオプションが表示されるようになります。

「Display comments for public topics」オプションを選択すると、公開された Discourse カテゴリにあるトピックのコメントのみが表示されます。トピックが非公開カテゴリに公開されている場合、トピックへのリンクとそのコメント数(count)が表示されます。

WordPress から Discourse に公開されたトピックが、Discourse 上で公開カテゴリから非公開カテゴリに移動された場合、WordPress 上のコメントは削除され、リンクに置き換えられます。この変更が反映されるまで最大 10 分かかる場合があります。これは、WP Discourse プラグインが Discourse から返されるコメントデータをキャッシュしているためです。カテゴリキャッシュを即座に無効化するには、プラグインの「Publishing Settings」ページから「Force Category Update」オプションを選択し、設定ページを保存してください。

プラグインが Discourse のサブカテゴリの権限にアクセスできるようにするには、プラグインの「Publishing Settings」タブから「Display Subcategories」オプションを選択する必要があります。このオプションが有効になっておらず、「Display comments for public topics」オプションが有効になっている場合、Discourse 上のすべてのサブカテゴリは非公開とみなされ、コメントの代わりにリンクが表示されます。

注: 直接 Discourse 上で行われたカテゴリの変更をプラグインが認識できるのは、サイトが Discourse の最新バージョン上で動作している場合に限られます。

プログラム的にどのユーザーに対して Discourse コメントを表示するかを制御するには、wpdc_load_comments_template_for_user フィルターフックを使用して、特定のユーザーに対して WP Discourse コメントの読み込みを完全にバイパスできます。このフックには 3 つの引数が渡されます:$load_template(デフォルトは true)、$current_user$post_id。このフィルターにフックした関数から false を返すことで、特定のユーザーに対するコメントの読み込みを防ぐことができます。

今回のアップデートで確認している変更点は、discourse_replies_html は期待通りに読み込まれて表示されるものの、discourse_no_replies_html の読み込みに失敗しているようです(「Join Discussion Link: no Comments」というテキストリンクは表示されますが、テンプレートは表示されません)。また、投稿が Discourse に公開されていない場合、「Comments are not currently available for this post.」という新しいメッセージが表示されます。これらはすべて、公開の Discourse カテゴリへの公開投稿です。

プライベートな Discourse カテゴリに公開された投稿の場合、デフォルトの WP コメントフォームが読み込まれているようです。Discourse トピックへのリンクはありません。

「Display comments for public topics」と「Display Subcategories」は設定されています。「Clear Cached Comment HTML」と「Force Category Update」を実行しました。何か見落としていることはありますか?

ご報告ありがとうございます!この問題は WP Discourse バージョン 2.0.8 で修正されています。

本日または明日中にプラグインに対していくつかの変更を加える予定で、それにより報告されている他の問題も解決するはずです。Discourse に公開されていない投稿に対して WordPress のコメントテンプレートを読み込めないという問題は、至急修正する必要がありました。

「公開トピックのコメントを表示」オプションと「既存の WP コメントを表示」オプションを選択し、既存の WordPress を持つ投稿を公開した際に私が確認している状況は以下の通りです:

ユーザーの視点から見ると、これはあまり明確ではありません(WordPress のカスタマイズで改善できるかもしれませんが)、Discourse コメントへのリンクは存在します。

「キャッシュされたコメント HTML」サイト設定を有効にしている場合は、無効にしてみてください。この設定が問題を引き起こすことはないと考えられますが、チェックを外すことでデバッグが簡素化されます。

問題に関するご存知の情報をさらに送信してください。WordPress 5.5 リリースに伴い発生している「トピックのリンク解除」ボタンに関する問題を修正するため、本日中に WordPress リポジトリに小さなアップデートをプッシュする予定です。

WP 5.5 でバージョン 2.1.1 を使用しています。コメントキャッシュは有効にしていませんし、WP のコメント機能も使用していません(ただし、デフォルトのフォームが読み込まれなくなったため、それは良いことです)。

しかし、カスタムテンプレートが読み込まれる場合と読み込まれない場合があります。Discourse トピックが非公開かどうかに関わらず、すべての投稿にコメントを表示するように設定を元に戻しましたが、それでも改善されませんでした。なぜそうなるのかはわかりませんが、個々の投稿ごとに一貫して発生しているようです。公開トピック内の公開投稿の例を以下に示します。

コメントなし、discourse_no_replies_html が読み込まれていない場合:

コメントなし、discourse_no_replies_html が読み込まれている場合:

コメントあり、discourse_replies_html が読み込まれていない場合:

コメントあり、discourse_replies_html が読み込まれている場合:

この問題はカスタムテンプレートに関連している可能性がありますが、コメントテンプレートが読み込まれず、代わりにコメントリンクが表示されるという別の報告もあります。開発サイトではこの問題を再現できませんが、問題の解決につながるプラグインの小さな変更を行います。明日の早めには準備が整う予定です。ご辛抱いただき、ありがとうございます!

プラグインを バージョン 2.1.2 に更新して、これで問題が解決するかどうかお知らせください。

2.1.2 へのアップデートにより、テンプレート読み込みの問題が解決したことを確認しました。ありがとうございます!