Ok、グループの署名をより良く機能させたい方(特に署名を有料アップグレード/サブスクリプションの一部として使用するオプションを利用したい方)のために、これをはるかに良くし、アップグレードの促進に役立つと思われるコード(およびその理由)を以下に示します。何度も試行錯誤しましたが、機能しています。「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が確実に存在するため、今すぐ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;
}
/* 'user-is-XXXXX' クラスが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;
}
- このコードを最初のブロックの上にある
<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;
}
/* 'user-is-XXXXX' クラスが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;
}
完了です。
私は開発者ではありません。私が知っているのは、これが私のサイトで100%機能しているということです。
また、プラグインの作者へ。署名の文字数を制限する機能があれば、大変ありがたいです。色々なことを試しましたが、どれも機能しませんでした。