好的,对于那些希望真正改善其群组签名的用户(特别是如果您想使用将签名作为付费升级/订阅一部分的选项),这里有一些我认为效果好得多的代码(以及背后的原因),可以帮助您推动更多升级。我尝试了很多次,但它奏效了。请注意您需要替换“XXXXX”部分的位置。
我希望实现以下 2 件事:
A) 我想禁用不查看签名的功能。这意味着那些进行升级的用户知道他们的签名将被所有人看到。
B) 我希望只有特定群组才能创建签名。
-
转到 管理员 > 外观 > 主题和组件 > 组件 > 安装 > 创建新的
-
将此代码添加到
<head>选项卡:
<script>
// 等待基本页面结构首先加载
document.addEventListener("DOMContentLoaded", function() {
// 设置观察者
const observer = new MutationObserver(function(mutations) {
// 查找页面上的所有控件标签
const labels = document.querySelectorAll('label.control-label');
labels.forEach(label => {
// 查找特定的“签名”标签
if (label.textContent.trim() === 'Enable Signatures') {
// 查找包含标签和复选框的主容器并将其隐藏
const controlGroup = label.closest('.control-group') || label.parentElement;
if (controlGroup) {
controlGroup.style.display = 'none';
}
}
});
});
// 现在开始观察 body,因为我们知道它存在
observer.observe(document.body, { childList: true, subtree: true });
});
</script>
3. 将此代码添加到 css 选项卡(将 XXXXX 替换为您的群组名称):
/* 隐藏所有人的签名部分 */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: none !important;
}
/* 仅当 body 上存在 'user-is-XXXXX' 类时才显示它 */
body.user-is-XXXXX .user-preferences .control-group.signatures,
body.user-is-XXXXX .user-preferences .signature-preferences,
body.user-is-XXXXX .user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: block !important;
}
- 将此代码添加到第一个代码块下方的
<head>标签中(将 XXXXX 替换为您的群组名称):
<script>
(function() {
const checkAccess = () => {
// Discourse 将当前用户的群组存储在这个全局对象中
const user = window.Discourse && window.Discourse.User && window.Discourse.User.current();
if (user && user.groups) {
// 检查是否有任何群组名称与“XXXXX”匹配
const isXXXXX = user.groups.some(g => g.name === 'XXXXX');
if (isXXXXX) {
document.body.classList.add('user-is-XXXXX');
}
}
};
// 立即运行
checkAccess();
// 在用户在页面之间导航时运行
document.addEventListener('discourse-ready', checkAccess);
// 备份:在 1 秒后再次运行以捕获加载缓慢的情况
setTimeout(checkAccess, 1000);
})();
</script>
- 将此代码添加到第一个代码块下方的 css 选项卡中(将 XXXXX 替换为您的群组名称):
/* 隐藏所有人的签名部分 */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: none !important;
}
/* 仅当 body 上存在 'user-is-XXXXX' 类时才显示它 */
body.user-is-XXXXX .user-preferences .control-group.signatures,
body.user-is-XXXXX .user-preferences .signature-preferences,
body.user-is-XXXXX .user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: block !important;
}
完成。
我不是开发人员。我所知道的就是它在我的网站上 100% 有效。
另外,对于插件作者——非常希望能够限制签名字符数。我尝试了很多方法,但都没有奏效。