api.decorateWidget - ¿cómo puedo encontrar los nombres de las plantillas?

¿Cómo puedo encontrar las ubicaciones de las plantillas de Discourse para configurarlas en el código?

Especialmente, estoy interesado en el nombre correcto de la tarjeta de usuario

Hay un componente de tema muy útil para rastrear las salidas de plugins de nuestras diversas plantillas Handlebars: (deprecated) Plugin outlet locations theme component. Al final del primer mensaje hay un enlace a una vista previa del componente en nuestro sitio de creación de temas. Puedes usarlo para encontrar la mayoría de las salidas de plugins sin necesidad de instalarlo en tu propio sitio.

Hay algo que debes tener en cuenta: las plantillas y los widgets son dos conceptos distintos. Dicho esto, pueden trabajar juntos si es necesario, adjuntando un widget a una salida de plugin de una plantilla. Sin embargo, en este momento es más común usar conectores/componentes/controladores para trabajar con salidas de plugins, tal como lo harías en un plugin.

Esta sección de la guía para desarrolladores cubre gran parte de lo que buscas. También te recomiendo revisar los repositorios de GitHub de componentes de tema en nuestra categoría #theme para ver algunos buenos ejemplos.

¡Gracias por el consejo! Encontré la parte necesaria user-card-post-names:after.

Intenté usarla en el código original, pero no funcionó.

Cambie poster-name:after por user-card-post-names:after, pero no funcionó y el campo personalizado no es visible en la tarjeta de usuario. ¿Alguna idea sobre la razón de esto?

No podrás usar decorateWidget() en una salida de plugin. Prueba algo como esto:

<script type="text/discourse-plugin" version="0.8.42">
    const h = require("virtual-dom").h;
    api.createWidget("user-card-custom-field", {
      html(attrs) {
        const userCustomFields = attrs.user.custom_fields;
        if (userCustomFields.user_field_4) {
            return h('span.poster-user-field', userCustomFields.user_field_4);
        }
      }
    });
</script>

<script type="text/x-handlebars" data-template-name="/connectors/user-card-post-names/user-card-custom-field">
    {{mount-widget widget="user-card-custom-field" args=(hash user=user)}}
</script>

mount-widget está pasando el objeto user que tenemos disponible desde la salida del plugin en el núcleo y lo está haciendo accesible en los atributos del widget user-card-custom-field que hemos creado.

Asegúrate de haber agregado user_field_4 a tus configuraciones de sitio de campos personalizados de usuario público o campos personalizados de usuario de personal, según sea necesario.

Edición

Además, a menos que haya algo particularmente especial que necesites hacer, deberías poder evitar los widgets por completo y simplemente usar la salida del plugin:

<script type="text/x-handlebars" data-template-name="/connectors/user-card-post-names/user-card-custom-field">
  {{#if user.custom_fields.user_field_1}}
    <span class="poster-user-field">{{user.custom_fields.user_field_1}}</span>
  {{/if}}
</script>

¡Muchas gracias! Todo está funcionando.