隐藏特定用户

我想分享一段简单的 JavaScript 代码,用于从 Users 列表中隐藏特定用户。我想象如果通过插件实现会更优雅,但我目前还没有足够的勇气去尝试!此外,此方法需要针对每个主题分别设置,并且目前硬编码为仅适用于 Light 主题!不过其原理适用于任何主题。

假设你有名为 james-adminanother-admin 的用户,你不希望他们向所有用户公开可见。只需将以下自定义脚本添加到 </body> 自定义设置中(设置 -> 自定义 -> 主题 -> Light -> </body>):

<script type="text/javascript">
    
    // 隐藏用户
    let hidden_users = [ "james-admin", "another-admin" ];
    
    // 当页面通过 AJAX 加载时
    $( document ).ajaxComplete( function( event, xhr, settings ) {
        
        // 检查是否在用户列表页面
        if ( settings.url.startsWith("/directory_items?") ) {
            
            // 查找所有包含隐藏用户的容器
            hidden_users.forEach(function ( hidden_user ) {
                $( "a:contains('" + hidden_user + "')" ).each( function() {
                    
                    // 双重确认
                    if ( this.text === hidden_user ) {
                        
                        // 隐藏用户(特定于该主题!)
                        $( this ).closest( "tr" ).remove();
                        
                    }
                    
                });
            });
            
        }
        
    });
    
</script>

欢迎提出评论!

想确认一下,这是列出管理员和版主的那个“关于”页面吗?

这太棒了。我需要学习更多编程知识。

@Heliosurge,好观点——这原本是关于用户列表(/u)的,但我现在已更新以包含站点信息(/about)。

我已更新代码,使您可以指定要隐藏的页面,以及如果存在父容器也需要一并移除的情况。

<script type="text/javascript">
    
    // 要隐藏的页面(页面|父容器)
    let mask_pages = ["/directory_items?|tr", "/about.json"];
    let mask_users = ["james-admin", "another-admin"];
    
    // 当页面通过 AJAX 加载时
    $(document).ajaxComplete(function(event, xhr, settings) {
        
        // 检查是否在用户列表页面
        mask_pages.forEach(function(mask_page_full_spec) {
            
            // 拆分规格
            let mask_page_spec = mask_page_full_spec.split("|");
            
            // 查找页面
            if (settings.url.startsWith(mask_page_spec[0])) {
                mask_users.forEach(function(mask_user) {
                    
                    // 获取元素
                    let mask_user_elem = $("[data-username='"+mask_user+"']");
                    
                    // 是否有父容器?
                    if (mask_page_spec.length == 2) {
                        mask_user_elem.closest(mask_page_spec[1]).remove();
                    } else {
                        mask_user_elem.remove();
                    }
                    
                });
            }
            
        });
        
    });
    
</script>

太棒了!干得漂亮。

我意识到这在移动版本上不起作用。请更改以下内容:

// 按顺序搜索 <tr> 或 <div>
let mask_pages = ["/directory_items?|tr,div", "/about.json"];

// 从父级搜索,因为 closest 可能包含对象本身
mask_user_elem.parent().closest(mask_page_spec[1]).remove();

希望这对大家有些帮助。正如我所说,我相信使用插件会是屏蔽那些“管理员”用户(他们不希望被客户论坛看到)的更优方案。

我意识到这段 JavaScript 代码也可以作为一个组件,在兼容的主题之间共享。我现在不再为这个微不足道的功能让大家感到无聊了——但它确实帮了我大忙!:grinning: