クエリ文字列を使用してトピック表示をフィルタリングする

:bookmark: このガイドでは、Discourse サイトの任意の場所でクエリ文字列を使用してカスタムなフィルタリングされたトピック表示を取得する方法について説明します。クエリ文字列は、すべてのユーザーが特定のトピック一覧を表示したり、独自のトピック一覧へのカスタムリンクを作成したり、特定の条件を満たすトピックを検索したりするために使用できます。

:person_raising_hand: 必要なユーザーレベル:すべてのユーザー

クエリ文字列とは、Discourse のほとんどの URL の末尾に追加して、カスタムでフィルタリングされたトピック表示を取得するためのテキストです。特定のトピック一覧の表示、独自のトピック一覧へのカスタムリンクの作成、特定の条件を満たすトピックの検索などに役立ちます。

クエリ文字列の仕組み

クエリ文字列は、URL の末尾に追加され、疑問符(?)で始まり、パラメータとその値が続きます。例:

https://meta.discourse.org/?status=open

この URL では、?status=open がクエリ文字列です。

クエリ文字列を使用して表示されるトピック一覧は、依然としてユーザーアカウントでアクセス可能なトピックに限定されます。クエリ文字列を使用するために設定を有効にする必要はありません。

利用可能なクエリ文字列パラメータ

すべての Discourse サイトで利用可能なクエリ文字列パラメータは以下の通りです:

ステータス

?status=_ を使用して、特定のステータスのトピックを表示します:

  • open: 開いているトピックのみ
  • closed: 閉じられたトピックのみ
  • archived: アーカイブされたトピックのみ
  • listed: リスト表示(可視)のトピックのみ
  • unlisted: リスト表示されていないトピックのみ
  • deleted: 削除されたトピックのみ
  • public: 公開(読み取り制限なし)カテゴリ内のトピックのみ

検索

?search=_ を使用して、検索結果のフルページを作成します。_ を検索語句に置き換えてください。

状態

?state=_ を使用して、特定の状態のトピックを表示します:

  • muted: ミュートしたトピックを表示
  • normal: 通常状態に設定したトピックを表示
  • tracking: 追跡中のトピックを表示
  • watching: 監視中のトピックを表示
  • watching_first_post: 監視対象のカテゴリまたはタグを持つトピックで、最初の投稿のみを表示

昇順表示

?ascending=true を使用して、トピックを日付の昇順で表示します。デフォルトは降順です。

順序

?order=_ を使用して、さまざまな基準でトピックを降順に表示します:

  • likes: いいね数順
  • op_likes: 元投稿のいいね数順
  • views: 閲覧数順
  • posts: 投稿数(返信数)順
  • activity: 最終活動日順(bumped_at 日付を含む)
  • posters: 参加者数順
  • category: カテゴリ名順(Z-A)
  • created: トピック作成日順(新しいトピックが先)

投稿数フィルタ

  • ?max_posts=_: 投稿数が _ 以下のトピックを返す
  • ?min_posts=_: 投稿数が _ 以上のトピックを返す

年齢フィルタ

  • ?before=_: _ 日以上前に作成されたトピックを返す
  • ?bumped_before=_: _ 日以上前に更新(bump)されたトピックを返す

トピック ID

?topic_ids=_ を使用して、特定の ID を持つトピックの一覧を表示します。カンマ区切りのトピック ID 文字列を受け付けます。

カテゴリ

?category=_ を使用して、特定のカテゴリのトピック一覧を表示します。カンマ区切りのカテゴリ ID 番号の文字列を受け付けます。

?no_subcategories=true を使用して、カテゴリでフィルタリングする際にサブカテゴリのトピックを除外します。

タグ

?tags=_ を使用して、タグでトピックをフィルタリングします。例:https://meta.discourse.org/?tags=how-to は、how-to タグを持つすべてのトピックを表示します。

?match_all_tags=true?tags=_ と組み合わせて使用すると、指定されたタグのいずれかではなく、すべてのタグを持つトピックを条件にします。

?no_tags=true を使用して、タグを持たないトピックのみを表示します。

?exclude_tag=_ を使用して、特定のタグを持つトピックを除外します。

いいねフィルタ

?f=liked を使用して、現在のユーザーが投稿にいいねをしたトピックのみを表示します。

プラグイン固有のパラメータ

一部のプラグインは、追加のクエリ文字列パラメータを提供します:

Solved プラグイン

Solved プラグインがインストールされている場合:

  • ?solved=yes: 解決済みトピックを表示
  • ?solved=no: 未解決トピックを表示

Assign プラグイン

Assign プラグインがインストールされている場合:

  • ?assigned=username: 特定のユーザーに割り当てられたすべてのトピックを表示
  • ?assigned=*: すべてのユーザーに割り当てられたすべてのトピックを表示
  • ?assigned=me: 現在のユーザーに割り当てられたすべてのトピックを表示
  • ?assigned=nobody: 未割り当てのすべてのトピックを表示

クエリ文字列の組み合わせ

複数のクエリ文字列をアンパサンド(&)記号を使用して組み合わせることができます。複数のクエリ文字列を使用する場合、最初のパラメータのみ ? 記号が必要です。例:

https://meta.discourse.org/?max_posts=1&status=closed

この URL は、投稿数が 1 つの閉じられたトピックを表示します。

高度な検索ページの使用方法

また、高度な検索ページを使用して、グラフィカルユーザーインターフェースでこれらの URL を構築し、結果の URL をコピーすることもできます。ただし、一部の検索フィルタは、検索コンテキスト外ではクエリ文字列パラメータとして機能しない場合があります。

追加リソース

「いいね!」 18

GUIを使用してこれらのURLを構築し、URLをコピーするだけでは、高度な検索ページを使用できませんか?

「いいね!」 1

検索フィルターの : をクエリ文字列の = に置き換えるだけで、同じパラメーターのように思えますが、一部の検索フィルターは、検索外のクエリ文字列パラメーターとして使用すると機能しません。

そのため、完全なリストはこのドキュメントにあると思います。ただし、確実にするために、それらが参照されている Discourse のどのファイルにあるかを確認したいと思います。

編集:現在 /filter ルートがあり、さらに多くのフィルター基準があります。

「いいね!」 3

Solved プラグインをお持ちの場合は、次を使用することもできます。

?solved=yes
?solved=no

「いいね!」 3

Assign 用にもいくつかあると思います。

追加しておきますね。:+1:

「いいね!」 3

推測ですが、タグにも使用できるのではないでしょうか?

素晴らしい方法

「いいね!」 2

はい、クエリ文字列を使用してタグでフィルタリングするために、Discourse URL に ?tags=_ を追加できます。

たとえば、https://meta.discourse.org/?tags=how-to は、Meta のすべての how-to タグにリダイレクトされます。

「いいね!」 2

クエリ文字列で否定(除外)フィルターを使用することは可能ですか?現在、高度な検索では、接頭辞に - を付けて行います。

-tags: smth

しかし、これはクエリ文字列では不可能です。

新しい /filter ルートを使用すれば、間違いなく可能です。

例えば https://meta.discourse.org/filter?q=-tags%3Aofficial%20%20category%3Aplugin

「いいね!」 3

ありがとうございます!複数のステータス(OR)で検索することは可能でしょうか?色々な方法を試しましたが、全くサポートされていないようです。例えば、オープン、クローズド、アーカイブ済みのいずれかのステータスを持つトピックがあるとします。アーカイブ済みのものを除外したい、つまりオープンまたはクローズドを検索したいだけです。これまでに試したことは以下の通りです。

  • 高度な検索:status:open,closed
  • 高度な検索:status:open status:closed
  • クエリ文字列:?status=open,closed

どれも機能しませんでした。