Você não conseguirá usar decorateWidget() em uma saída de plugin. Tente algo assim:
<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>
O mount-widget está passando o objeto user que temos disponível na saída de plugin no núcleo e tornando-o acessível nos atributos do widget user-card-custom-field que criamos.
Certifique-se de ter adicionado user_field_4 às suas configurações de site “campos personalizados de usuário público” ou “campos personalizados de usuário da equipe”, conforme necessário.
Edição
Além disso, a menos que haja algo particularmente especial que você precise fazer, você deve ser capaz de evitar widgets completamente e simplesmente usar a saída de 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>