Mostrar todas las categorías en la página de inicio (incluidas las silenciadas), pero no mostrar sus temas en las últimas publicaciones

Así, nuestra página de inicio muestra dos columnas: categorías a la izquierda y los temas más recientes a la derecha.

Los temas de una categoría se actualizan automáticamente, por lo que me gustaría ocultarla de la columna de la derecha (recientes).

Sin embargo, no quiero silenciar esa categoría para todos los usuarios; se ve realmente mal que esté oculta en el acordeón “Silenciado” (spoiler) en la página de inicio.

¿Hay alguna forma de solucionar este problema?

Última actualización hace ~2 años. Me preocupa la posibilidad de problemas de compatibilidad.

El caso ideal sería lograr mi objetivo utilizando métodos estándar.

¿Qué tal si creas una subcategoría y configuras la categoría principal para que no incluya los temas de la subcategoría en el filtro de lista predeterminado?

¿Eso afectará la lista «Recientes» que se muestra en la página de inicio Categoría+Recientes?

Otro problema es que, si alguien silencia la categoría, esto no debería afectar lo que se muestra a los usuarios anónimos, ¿verdad?

En mi caso, busco lograr consistencia. Necesito una categoría completa que se comporte como una normal, excepto que sus nuevos temas y actualizaciones no aparezcan en la sección “Lo más reciente” de la página de inicio.

Para ser honesto, no estoy seguro sin replicar tu configuración. :slightly_smiling_face: Aunque también puedes silenciar por defecto la subcategoría como opción (o cambiar la visibilidad en la configuración de seguridad). Es posible que necesites probar varias combinaciones para ver si alguna se acerca a lo que buscas.

Si un usuario silencia algo (un tema, una categoría, una etiqueta u otro usuario), esto solo le afecta a él y no tiene ningún efecto sobre los demás.

Tendrías que usar las opciones de silencio predeterminadas en la configuración de administración para hacerlo global, e incluso entonces un usuario podría anularlas.

Sí, por eso estoy aquí: porque no pude resolver el problema tras probar varias de las variaciones que se me ocurrieron.

¿Tener una categoría padre normal y una subcategoría silenciada por defecto no te acercaría bastante?

¿O quizás una etiqueta silenciada en su lugar?

Esa vista muestra 20 temas por defecto. Así que, a menos que esa categoría específica reciba muchos temas destacados (ya sean nuevos temas o respuestas), creo que está bien simplemente ocultar esos temas.

Tienes dos opciones.

  1. Con JavaScript en la pestaña de encabezado de tu tema
<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>

Esto evita que se renderice el marcado de los temas por completo. Cambia ignoreCategoryId por el ID de la categoría que quieras filtrar. Puedes encontrarlo visitando esa categoría y revisando la URL en tu navegador.

https://meta.discourse.org/c/support/6  <---- el último dígito es el ID de la categoría
  1. Con CSS… si es una categoría de nivel superior
.latest-topic-list-item.category-SLUG {
  display: none;
}

si es una subcategoría

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

Cualquier cosa más allá de eso requerirá un plugin o un cambio en el núcleo, hasta donde yo sé.