你好,
我当前的配置是,Discourse 在未登录状态下也可读。此外,我设置了“启用姓名”,以便在昵称旁边显示全名。
但我不希望未登录用户能够看到全名。是否有办法禁用此功能?我尚未找到相关设置。
提前感谢您的帮助!
你好,
我当前的配置是,Discourse 在未登录状态下也可读。此外,我设置了“启用姓名”,以便在昵称旁边显示全名。
但我不希望未登录用户能够看到全名。是否有办法禁用此功能?我尚未找到相关设置。
提前感谢您的帮助!
Is this possible with CSS @tshenry? I think we have the anon classes to do it?
I was going to respond to this earlier with some CSS, but remembered the case where username and display name match, resulting in the username being hidden.
In that situation it would present an avatar, with no name whatsoever.
But still better than get crawled by any bots
other forum software (plug-ins) hiding the full name and also anonymze the nick in e.g. to “user 34726”. Would be really perfect if I could hide at least the real name ![]()
I’m going to look into this when I get a chance. It should be doable with a small theme component. I’ve got a decent amount on my plate, so it maybe be a little bit before I get back to you with anything.
Alright, the script for removing the full name for anons is fairly simple. Just create a new theme component and add the following to the Common </head> section:
<script type="text/discourse-plugin" version="0.8">
api.reopenWidget("poster-name", {
html(attrs) {
let contents = this._super(attrs);
if(contents.length == 2 && !api.getCurrentUser()) {
return contents.shift();
}
return contents;
}
});
</script>
Some things to note:
hide_user_profiles_from_public
prioritize_username_in_ux enabledHope that helps 
Did this ever get integrated?
We’d like our forums to be publicly readable and indexed by search engines, but we’d like to not show real names unless you’re logged in (so that people’s real names aren’t exposed to non-members and search engines).
Is that possible? I tried the above code and could not get it working.
Does the above code need an update @tshenry?
I just checked and the code still works. All of the notes I mention still apply.
I did try to track down all of the areas where the user’s full name was used as the title attribute of their avatar. The following code should cover all the areas assuming you have hide_user_profiles_from_public and prioritize_username_in_ux enabled. Unfortunately it relies on overriding a couple of templates, but they don’t change very often. I’ve included links to the files on GitHub if you ever want to check to see if you need to update any of the code. The only modification I made was either adding or changing the namePath so that it uses the username instead of the full name.
<script type="text/discourse-plugin" version="0.8">
api.reopenWidget("poster-name", {
html(attrs) {
let contents = this._super(attrs);
if(contents.length == 2 && api.getCurrentUser()) {
return contents.shift();
}
return contents;
}
});
api.reopenWidget("post-avatar", {
html(attrs) {
attrs.name = "";
return this._super(attrs);
}
});
api.reopenWidget("topic-map-summary", {
html(attrs, state) {
attrs.createdByName = "";
attrs.lastPostName = "";
return this._super(attrs, state);
}
});
api.reopenWidget("topic-participant", {
html(attrs, state) {
attrs.name = "";
return this._super(attrs, state);
}
});
</script>
<!-- https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/components/user-info.hbs -->
<script type="text/x-handlebars" data-template-name="components/user-info">
<div class="user-image">
<div class="user-image-inner">
<a href="{{unbound userPath}}" data-user-card="{{unbound user.username}}">{{avatar user namePath="user.username" imageSize="large"}}</a>
{{#if user.primary_group_name}}
{{avatar-flair
flairURL=user.primary_group_flair_url
flairBgColor=user.primary_group_flair_bg_color
flairColor=user.primary_group_flair_color
groupName=user.primary_group_name}}
{{/if}}
</div>
</div>
<div class="user-detail">
<div class='name-line'>
<span class="username"><a href="{{unbound userPath}}" data-user-card="{{unbound user.username}}">{{format-username user.username}}</a></span>
<span class="name">{{unbound name}}</span>
</div>
<div class="title">{{unbound user.title}}</div>
{{#if hasBlock}}
<div class='details'>
{{yield}}
</div>
{{/if}}
</div>
</script>
<!-- https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/list/posters-column.raw.hbs -->
<script type="text/x-handlebars" data-template-name="list/posters-column.raw">
<td class='posters'>
{{#each posters as |poster|}}
<a href="{{poster.user.path}}" data-user-card="{{poster.user.username}}" class="{{poster.extraClasses}}">{{avatar poster avatarTemplatePath="user.avatar_template" usernamePath="user.username" namePath="user.username" imageSize="small"}}</a>
{{/each}}
</td>
</script>
<!-- https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/components/latest-topic-list-item.hbs -->
<script type="text/x-handlebars" data-template-name="components/latest-topic-list-item">
<div class='topic-poster'>
{{#user-link user=topic.lastPoster}}
{{avatar topic.lastPoster namePath="topic.lastPoster" imageSize="large"}}
{{/user-link}}
</div>
<div class='main-link'>
<div class='top-row'>
{{raw "topic-status" topic=topic}}
{{topic-link topic}}
{{#if topic.featured_link}}
{{topic-featured-link topic}}
{{/if}}
{{topic-post-badges newPosts=topic.totalUnread unseen=topic.unseen url=topic.lastUnreadUrl}}
</div>
<div class='bottom-row'>
{{category-link topic.category}}
{{discourse-tags topic mode="list"}}
</div>
</div>
<div class='topic-stats'>
{{raw "list/posts-count-column" topic=topic tagName="div"}}
<div class="topic-last-activity">
<a href="{{topic.lastPostUrl}}" title="{{topic.bumpedAtTitle}}">{{format-date topic.bumpedAt format="tiny" noTitle="true"}}</a>
</div>
</div>
</script>
This shouldn’t be viewed as a 100% secure method, but it will keep the information out of sight from anyone that’s not trying hard to find it.
At some point it would be nice to have this functionality as core behavior whenever prioritize_username_in_ux is enabled.
@DavidO have you read through Beginner's guide to using Discourse Themes? If you created a theme component and added the code to the Common </head> section, be sure to add the component to your main theme.
OK, thanks. Will work on it some more.
Agree that it would be nice to have it as an option, to hide real name from people not logged in (including search engines).
Appreciate it fellas.
我在考虑将社区的一部分公开。为了保护在该特定分类中做出贡献的成员,我想使用类似这样的匿名脚本。不过,我不希望启用 prioritize_username_in_ux。另一方面,我并不介意混淆所有名称——包括用户名和真实姓名,甚至头像。是否可以通过修改该脚本来实现这一目标?