Ok, para aqueles que realmente querem fazer suas assinaturas funcionarem melhor para o seu grupo (especialmente se você quiser usar as opções para ter uma assinatura como parte de um upgrade/assinatura paga), aqui está o código (e o raciocínio por trás dele) que eu acho que o torna muito melhor e pode ajudar você a impulsionar mais upgrades. Levei muitas tentativas, mas está funcionando. Preste atenção onde você precisa substituir as partes “XXXXX”.
Eu queria realizar as 2 coisas a seguir:
A) Eu queria desabilitar a capacidade de NÃO visualizar assinaturas. Isso significa que os usuários que fizerem o upgrade sabem que sua assinatura será vista por todos.
B) Eu queria que SOMENTE um determinado grupo tivesse a capacidade de criar uma assinatura.
-
Vá em Admin > Aparência > Temas e componentes > Componentes > Instalar > Criar novo
-
Adicione este código na aba
<head>:
<script>
// Aguarda a estrutura básica da página carregar primeiro
document.addEventListener("DOMContentLoaded", function() {
// Configura o observador
const observer = new MutationObserver(function(mutations) {
// Encontra todos os rótulos de controle na página
const labels = document.querySelectorAll('label.control-label');
labels.forEach(label => {
// Procura pelo rótulo específico de Assinaturas
if (label.textContent.trim() === 'Enable Signatures') {
// Encontra o contêiner principal que contém o rótulo e a caixa de seleção e o oculta
const controlGroup = label.closest('.control-group') || label.parentElement;
if (controlGroup) {
controlGroup.style.display = 'none';
}
}
});
});
// AGORA começa a observar o body, já que sabemos que ele existe
observer.observe(document.body, { childList: true, subtree: true });
});
</script>
3. Adicione este código na aba css (substitua XXXXX pelo nome do seu grupo):
/* Oculta a seção de assinatura para todos */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: none !important;
}
/* Só mostra se a classe 'user-is-XXXXX' estiver presente no body */
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;
}
- Adicione este código na tag
<head>abaixo do primeiro bloco acima (substitua XXXXX pelo nome do seu grupo):
<script>
(function() {
const checkAccess = () => {
// O Discourse armazena os grupos do usuário atual neste objeto global
const user = window.Discourse && window.Discourse.User && window.Discourse.User.current();
if (user && user.groups) {
// Verifica se algum nome de grupo corresponde a "XXXXX"
const isXXXXX = user.groups.some(g => g.name === 'XXXXX');
if (isXXXXX) {
document.body.classList.add('user-is-XXXXX');
}
}
};
// Executa imediatamente
checkAccess();
// Executa sempre que o usuário navega entre as páginas
document.addEventListener('discourse-ready', checkAccess);
// Backup: Executa novamente após 1 segundo para capturar carregamentos lentos
setTimeout(checkAccess, 1000);
})();
</script>
- Adicione este código na aba css abaixo do primeiro bloco acima (substitua XXXXX pelo nome do seu grupo):
/* Oculta a seção de assinatura para todos */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: none !important;
}
/* Só mostra se a classe 'user-is-XXXXX' estiver presente no body */
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;
}
Pronto.
Eu não sou um desenvolvedor. Tudo o que sei é que isso está funcionando 100% no meu site.
Além disso, para o autor do plugin – adoraria a capacidade de limitar a contagem de caracteres da assinatura. Tentei tantas coisas, mas nada funcionou.