従来の多階層ヒエラルキー対フラットなディスコースヒエラルキー

原則的には、すべてが可能です。

例えば、以前はカテゴリレベルで複数のタグの交差もサポートする、3 段階のカテゴリ階層を実装したことがあります。

3 段階のカテゴリ階層とマルチタグ交差のルート構造
scope "/multi" do
  constraints(tag_id: /[^\/]+?/, format: /json|rss/) do
     get '/c/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_category_show'
     get '/c/:parent_category/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_parent_category_category_show'
     get '/c/:grandparent_category/:parent_category/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_grandparent_category_category_show'

     Discourse.filters.each do |filter|
       get "/c/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_category_show_#{filter}"
       get "/c/:parent_category/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_parent_category_category_show_#{filter}"
       get "/c/:grandparent_category/:parent_category/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_grandparent_category_category_show_#{filter}"
     end
   end
end

これはあなたがやりたいことよりも複雑かもしれませんが、それを維持するには、サポートのために非常に多くの時間やリソースを投入する覚悟が必要です。標準の Discourse が変更された時点で、いつか破綻する可能性が高いでしょう。

その文脈を踏まえて、標準の Discourse におけるカテゴリ/タグのルート構造について理解すべきことが 2 つあります。

  1. マルチタグの交差はサイト全体でのみ可能であり、カテゴリレベルでは不可能です。つまり、標準の Discourse には、特定のカテゴリに属し、かつ複数の特定のタグを持つトピックの一覧を表示するルートは存在しません。これを実現したい場合は、ルートを追加する必要があります。

  2. カテゴリ間の交差は不可能です。つまり、同じレベルの 2 つのカテゴリ(例えば 2 つの親カテゴリ、または 2 つの子カテゴリ)からトピックを表示するルートは Discourse には存在しません。

それでも、サーバーサイドでの大幅な追加を行わずに 4 段階のシステム(これがあなたの目標のようです)を実現することは可能です。

例えば、4 つのレベルをタグのみで表現することもできます。https://thepavilion.io/tags/intersection/events/bug/to-do/high は、Pavilion における events、bug、to-do、high の各タグの交差を表します。これらタグが属する 4 つのタググループごとに、以下のような 4 つのドロップダウンを用意することもできます。

[plugin] [type] [status] [importance]

既存の Discourse ルート構造内で階層をどう構成するかを決めれば、残りの項目はすべてクライアントサイドの変更であり、(比較的) straightforward です。