إخفاء مستخدمين محددين من

أود أن أشارككم بعضًا من كود JavaScript بسيط لإخفاء مستخدمين محددين من قائمة المستخدمين. أتخيل أن هذا يمكن تنفيذه بطريقة أكثر أناقة عبر إضافة، لكنني لست شجاعًا بما يكفي للقيام بذلك حتى الآن! أيضًا، يجب تطبيق هذا على كل سمة، وهو مبرمج للعمل حاليًا مع سمة Light فقط! المبادئ تنطبق على أي سمة.

لنفترض أن لديك مستخدمين يُدعى james-admin و another-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();

أتمنى أن يكون هذا مفيدًا للأشخاص. وكما ذكرت، أنا متأكد من أن إضافة (plugin) ستكون طريقة أفضل بكثير لتمكين إخفاء المستخدمين الذين هم ‘مسؤولون’ ولا يرغبون في أن يكونوا مرئيين في منتدى العملاء.

أدرك أن هذا الجافا سكريبت يمكن أن يكون أيضًا مكونًا يمكن مشاركته بين السمات المتوافقة. سأكف عن إملائكم جميعًا بشأن هذه الميزة التافهة - لكنها ساعدتني! :grinning: