Ho pensato di condividere un semplice script JavaScript per nascondere utenti specifici dalla lista Users. Immagino che potrebbe essere gestito in modo molto più elegante tramite un plugin, ma non sono ancora abbastanza coraggioso da farlo! Inoltre, questa modifica va applicata per ogni tema ed è codificata per funzionare solo con il tema Light! I principi, però, si applicano a qualsiasi tema.
Supponiamo di avere utenti chiamati james-admin e another-admin e di non volerli rendere visibili apertamente a tutti gli utenti. Aggiungete semplicemente il seguente script personalizzato alla personalizzazione </body> (Impostazioni -> Personalizza -> Temi -> Light -> </body>):
<script type="text/javascript">
// utenti nascosti
let hidden_users = [ "james-admin", "another-admin" ];
// quando una pagina viene caricata via AJAX
$( document ).ajaxComplete( function( event, xhr, settings ) {
// controlla se siamo nella lista degli utenti
if ( settings.url.startsWith("/directory_items?") ) {
// trova tutti i contenitori con gli utenti nascosti
hidden_users.forEach(function ( hidden_user ) {
$( "a:contains('" + hidden_user + "')" ).each( function() {
// doppio controllo
if ( this.text === hidden_user ) {
// maschera / nascondi l'utente (specifico per questo tema!)
$( this ).closest( "tr" ).remove();
}
});
});
}
});
</script>
@Heliosurge, ottimo punto: si trattava dell’elenco degli utenti (/u), ma ora ho aggiornato includendo le informazioni sul sito (/about).
Ho aggiornato il codice in modo che tu possa specificare le pagine da mascherare e anche se esiste un contenitore padre che deve essere rimosso.
<script type="text/javascript">
// pagine da mascherare (pagina|genitore)
let mask_pages = ["/directory_items?|tr", "/about.json"];
let mask_users = ["james-admin", "another-admin"];
// quando una pagina viene caricata via AJAX
$(document).ajaxComplete(function(event, xhr, settings) {
// verifica se siamo nella lista degli utenti
mask_pages.forEach(function(mask_page_full_spec) {
// dividi la specifica
let mask_page_spec = mask_page_full_spec.split("|");
// trova la pagina
if (settings.url.startsWith(mask_page_spec[0])) {
mask_users.forEach(function(mask_user) {
// ottieni il contenitore
let mask_user_elem = $("[data-username='"+mask_user+"']");
// contenitore genitore?
if (mask_page_spec.length == 2) {
mask_user_elem.closest(mask_page_spec[1]).remove();
} else {
mask_user_elem.remove();
}
});
}
});
});
</script>
Ho notato che questo non funzionava per la versione mobile. Modifica quanto segue:
// cerca <tr> o <div>, in quest'ordine
let mask_pages = ["/directory_items?|tr,div", "/about.json"];
// cerca dal genitore, poiché closest può includere l'oggetto stesso
mask_user_elem.parent().closest(mask_page_spec[1]).remove();
Spero che questo possa essere utile a qualcuno. Come ho detto, sono sicuro che un plugin sarebbe un modo molto migliore per mascherare gli utenti che sono ‘amministratori’ e non desiderano essere visibili su un forum clienti.
Mi rendo conto che questo JavaScript potrebbe anche essere un componente condivisibile tra temi compatibili. Ora smetto di annoiarvi tutti con questa funzione insignificante, ma mi ha dato una mano!