ホームページの全カテゴリ(ミュートされたものも含む)を表示するが、最新投稿ではトピックを表示しない

そのため、ホームページでは左側にカテゴリ、右側に最新トピックの2列で表示されています。

特定のカテゴリのトピックは自動的に更新されるため、右側の「最新」列からは非表示にしたいと考えています。

ただし、すべてのユーザーに対してそのカテゴリをミュートするわけではありません。ホームページで「ミュート済み(つまりスプイラー)」として隠されてしまうのは、見た目が非常に悪いためです。

この問題を回避する方法はありますか?

最終更新は約2年前です。互換性の問題が懸念されます。

理想としては、標準的な手段を用いて目的を達成することです。

サブカテゴリを作成し、親カテゴリのデフォルトのリストフィルターでサブカテゴリのトピックを含めないように設定するのはどうでしょうか?

これにより、カテゴリ+最新ページに表示される「最新」リストに影響はありますか?

もう一つの課題は、カテゴリをミュートしても匿名ユーザーに表示される内容には影響しない、ということですね?

私のケースでは、一貫性を実現したいと考えています。通常のカテゴリと同様に動作しつつ、最新のトピックや更新がホームページの「最新」に表示されない、完全な機能を持つカテゴリが必要です。

正直なところ、あなたの設定をそのまま再現しない限り確実には言えません。:slightly_smiling_face: ただし、サブカテゴリをデフォルトでミュートするオプションを選んだり、セキュリティ設定で表示設定を変更したりすることも可能です。いくつかの組み合わせを試して、ご希望に近い状態になるか確認してみてください。

ユーザーが何らかのものをミュートする(トピック、カテゴリ、タグ、または他のユーザーなど)場合、それはそのユーザー本人にのみ適用され、他の誰にも影響しません。

これを全体的に適用するには、管理設定でデフォルトのミュートオプションを使用する必要がありますが、それでもユーザーがそれを上書きすることは可能です。

はい、だからここに来ました。考えられるいくつかのバリエーションを試してみましたが、問題の解決ができなかったためです。

親カテゴリを通常にし、サブカテゴリをデフォルトでミュートに設定すれば、ご希望に近い状態になるかもしれません。

あるいは、ミュートタグを使う方法はいかがでしょうか?

そのビューはデフォルトで20件のトピックを表示します。そのため、特定のカテゴリに新しいトピックや返信が頻繁に追加されない限り、それらのトピックを非表示にしても問題ないと思います。

以下の2つのオプションがあります。

  1. テーマのヘッダータブで JavaScript を使用
<script type="text/discourse-plugin" version="0.8">
  const { on } = require("discourse-common/utils/decorators");
  const ignoreCategoryId = 6;

  api.modifyClass("component:categories-topic-list", {
    @on("didReceiveAttrs")
    removeCategoryTopics() {
      const filtered = this.topics.filter(
        ({ category_id }) => category_id !== ignoreCategoryId
      );

      this.topics = filtered;
    },
  });
</script>

これにより、トピックのマークアップ自体がレンダリングされなくなります。ignoreCategoryId を対象とするカテゴリの ID に変更してください。その ID は、該当するカテゴリにアクセスしてブラウザの URL を確認することで取得できます。

https://meta.discourse.org/c/support/6  <---- 最後の数字がカテゴリ ID です
  1. CSS を使用(トップレベルのカテゴリの場合)
.latest-topic-list-item.category-SLUG {
  display: none;
}

サブカテゴリの場合

.latest-topic-list-item.category-PARENT_SLUG-CATEGORY_SLUG {
  display: none;
}

それ以上の対応については、私の知る限りプラグインの作成かコア部分の変更が必要です。