Ocultar usuarios específicos de

Pensé que compartiría un poco de JavaScript sencillo para ocultar usuarios específicos de la lista de Users. Imagino que esto podría hacerse de manera mucho más elegante mediante un plugin, ¡pero aún no me atrevo a hacerlo! Además, esto debe hacerse para cada tema y está codificado para funcionar únicamente con el tema Light! Los principios se aplican a cualquier tema.

Digamos que tienes usuarios llamados james-admin y another-admin y no deseas que sean visibles abiertamente para todos los usuarios. Simplemente agrega el siguiente script personalizado a la personalización de </body> (Configuración -> Personalizar -> Temas -> Light -> </body>):

<script type="text/javascript">
    
    // usuarios ocultos
    let hidden_users = [ "james-admin", "another-admin" ];
    
    // cuando una página se carga mediante AJAX
    $( document ).ajaxComplete( function( event, xhr, settings ) {
        
        // verificar si estamos en la lista de usuarios
        if ( settings.url.startsWith("/directory_items?") ) {
            
            // encontrar todos los contenedores con usuarios ocultos
            hidden_users.forEach(function ( hidden_user ) {
                $( "a:contains('" + hidden_user + "')" ).each( function() {
                    
                    // verificación doble
                    if ( this.text === hidden_user ) {
                        
                        // enmascarar / ocultar el usuario (específico para este tema!)
                        $( this ).closest( "tr" ).remove();
                        
                    }
                    
                });
            });
            
        }
        
    });
    
</script>

¡Comentarios bienvenidos!

Solo para confirmar, ¿esta es la página de Acerca de que lista a los administradores y moderadores?

Esto es bastante increíble. Necesito aprender más sobre programación.

@Heliosurge, buen punto: esto se refería a la lista de usuarios (/u), pero ahora he actualizado para incluir la información del sitio (/about).

He actualizado el código para que puedas especificar las páginas que se deben ocultar y también si hay un contenedor padre que también deba eliminarse.

<script type="text/javascript">
    
    // páginas a ocultar (página|padre)
    let mask_pages = ["/directory_items?|tr", "/about.json"];
    let mask_users = ["james-admin", "another-admin"];
    
    // cuando se carga una página mediante AJAX
    $(document).ajaxComplete(function(event, xhr, settings) {
        
        // verificar si estamos en la lista de usuarios
        mask_pages.forEach(function(mask_page_full_spec) {
            
            // dividir la especificación
            let mask_page_spec = mask_page_full_spec.split("|");
            
            // encontrar la página
            if (settings.url.startsWith(mask_page_spec[0])) {
                mask_users.forEach(function(mask_user) {
                    
                    // obtener el contenedor
                    let mask_user_elem = $("[data-username='"+mask_user+"']");
                    
                    // ¿contenedor padre?
                    if (mask_page_spec.length == 2) {
                        mask_user_elem.closest(mask_page_spec[1]).remove();
                    } else {
                        mask_user_elem.remove();
                    }
                    
                });
            }
            
        });
        
    });
    
</script>

¡Eso es un trabajo increíble!

Me di cuenta de que esto no funcionaba para la versión móvil. Cambia lo siguiente:

// buscar <tr> o <div>, en ese orden
let mask_pages = ["/directory_items?|tr,div", "/about.json"];

// buscar desde el padre, ya que closest puede incluir el propio objeto
mask_user_elem.parent().closest(mask_page_spec[1]).remove();

Espero que esto sea de alguna utilidad para la gente. Como dije, estoy seguro de que un complemento sería una forma mucho mejor de poder ocultar a los usuarios que son ‘administradores’ y no desean ser visibles en un foro de clientes.

Me doy cuenta de que este JavaScript también podría ser un componente que se pueda compartir entre temas compatibles. Ya no os aburriré más con esta característica insignificante, ¡pero me ha sido de gran ayuda! :grinning: