Nascondere utenti specifici da

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>

Commenti benvenuti!

Per confermare, è questa la pagina Chi siamo che elenca Amministratori e Moderatori?

È davvero fantastico. Devo imparare a programmare di più.

@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>

Che lavoro fantastico.

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! :grinning: