话语签名

好的,对于那些希望真正改善其群组签名的用户(特别是如果您想使用将签名作为付费升级/订阅一部分的选项),这里有一些我认为效果好得多的代码(以及背后的原因),可以帮助您推动更多升级。我尝试了很多次,但它奏效了。请注意您需要替换“XXXXX”部分的位置。

我希望实现以下 2 件事:

A) 我想禁用不查看签名的功能。这意味着那些进行升级的用户知道他们的签名将被所有人看到。

B) 我希望只有特定群组才能创建签名。

  1. 转到 管理员 > 外观 > 主题和组件 > 组件 > 安装 > 创建新的

  2. 将此代码添加到 <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;
}
  1. 将此代码添加到第一个代码块下方的 <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>
  1. 将此代码添加到第一个代码块下方的 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% 有效。

另外,对于插件作者——非常希望能够限制签名字符数。我尝试了很多方法,但都没有奏效。

1 个赞