I have a use case where I would like to add the content from a custom user field next to my username in the post header:
not sure the best way to go about this?
very new to discourse and all its wonders
I have a use case where I would like to add the content from a custom user field next to my username in the post header:
not sure the best way to go about this?
very new to discourse and all its wonders
You can do a lot with the methods found in plugin-api.js.es6. To add content before or after the poster name widget, use the decorateWidget method. Use 'poster-name:after' as the name/type parameter.
Checking the result of the console.log statement from the following code will tell you what attributes are available:
<script type="text/discourse-plugin" version="0.8.27">
api.decorateWidget('poster-name:after', helper => {
console.log('attrs', helper.attrs);
});
</script>
What you’ll see is that custom user fields are not available. To get access to them, you need to add the name of the user custom field to the public user custom fields Site Setting. Finding the name of the field can be tricky. One way to find the name is to go to /admin/customize/user_fields.json and look at the JSON for the page. You’ll see something like this:
{
"user_fields": [
{
"id": 1,
"name": "Terms of Service",
"description": "<a href=\"http://localhost:3000/tos\">I have read the tos</a>",
"field_type": "confirm",
"editable": true,
"required": false,
"show_on_profile": false,
"show_on_user_card": false,
"position": 1
},
{
"id": 4,
"name": "city",
"description": "your city",
"field_type": "text",
"editable": true,
"required": true,
"show_on_profile": false,
"show_on_user_card": false,
"position": 3
}
]
}
You can get the name of the field by appending “user_field_” to the field’s ID. So the “city” field on my site has the name “user_field_4”. Add the name to the public user custom fields Site Setting so that it is available in helper.attrs.
The following code will add the city field after the poster-name widget for users who have set that custom field. The field is wrapped in <span class="poster-user-field"></span> tags, so it can be styled with CSS.
<script type="text/discourse-plugin" version="0.8.27">
api.decorateWidget('poster-name:after', helper => {
const attrs = helper.attrs;
if (attrs.userCustomFields && attrs.userCustomFields.user_field_4) {
return helper.h('span.poster-user-field', helper.attrs.userCustomFields.user_field_4);
}
});
</script>
Thank you for this explanation, it’s something that I was also looking for. I’d say what’s missing in this explanation is how you insert the javascript snippet and where you do it. Do you need to create a separate plugin for it?
The code I posted above with the console.log statement that returns the post attributes, is meant to go in a theme or a theme component. For a general overview of developing Discourse themes, see Developer’s guide to Discourse Themes. For details about using the Plugin API methods in a theme, instead of a plugin, see https://meta.discourse.org/t/using-the-pluginapi-in-site-customizations/41281.
Does anybody knows how to do it via themes?
This is exaclty what i look for.
I want to be able to see it just like LinkedIn does (shows Job title):

Just like in this conversation here:
مرحباً بالجميع! أنا جديد على Discourse ووجدت هذا الموضوع الذي يبدو أنه بالضبط ما أحاول القيام به. لدي حقل مخصص أود عرضه مباشرة بعد الاسم الكامل للمستخدم في منشور.
أنا لست عديم الخبرة تمامًا في إنشاء إضافات لتطبيقات الويب الأخرى التي استخدمتها في الماضي، لذلك أعتقد أنه مع ما يكفي من الصبر والتجربة والخطأ يمكنني معرفة كيفية جعل مكون سمة أو شيئًا مشابهًا يعمل. أنا في طور المرور عبر برنامج تعليمي لتطوير السمات الآن.
أعتقد أنني اكتشفت اسم الحقل لإضافته إلى إعداد “الحقول المخصصة للمستخدم العام” (أعتقد أن المعرف هو 2، لذلك قمت بتعيينه إلى user_field_2).
لقد سجلت الدخول إلى موقع Discourse الخاص بي، وأنشأت مكون سمة جديدًا. قمت بتمكينه لجميع السمات التي قمت بتثبيتها. ذهبت إلى JS ونسخت الكود من الأعلى (تغيير user_field_4 إلى user_field_2). لم يبدو أنه يفعل أي شيء، لذلك أنا متأكد من أنني فعلت شيئًا خاطئًا. هل هناك مكان آخر احتجت فيه إلى لصق هذا؟ أم أنني بعيد كل البعد عن الهدف؟
أعلم أن هذا المنشور قديم إلى حد ما، لذا قد يكون الكود قديمًا. هل هناك أي احتمال أن يتمكن أي شخص من مساعدتي؟ سأبذل قصارى جهدي للإجابة على أي أسئلة أو تقديم أي تفاصيل مطلوبة. شكراً جزيلاً!