Ich wollte euch ein einfaches JavaScript zeigen, mit dem ihr bestimmte Benutzer aus der Users-Liste ausblenden könnt. Ich stelle mir vor, dass dies über ein Plugin viel eleganter gelöst werden könnte, aber ich bin noch nicht mutig genug dafür! Außerdem muss dies für jedes Theme separat durchgeführt werden, und der folgende Code ist hartkodiert, um nur mit dem Light-Theme zu funktionieren! Die Prinzipien lassen sich jedoch auf jedes Theme übertragen.
Nehmen wir an, ihr habt Benutzer namens james-admin und another-admin, die nicht für alle Benutzer offen sichtbar sein sollen. Fügt einfach das folgende benutzerdefinierte Skript in die </body>-Anpassung ein (Einstellungen -> Anpassen -> Themes -> Light -> </body>):
<script type="text/javascript">
// versteckte Benutzer
let hidden_users = [ "james-admin", "another-admin" ];
// wenn eine Seite per AJAX geladen wird
$( document ).ajaxComplete( function( event, xhr, settings ) {
// prüfen, ob wir auf der Benutzerliste sind
if ( settings.url.startsWith("/directory_items?") ) {
// alle Container mit versteckten Benutzern finden
hidden_users.forEach(function ( hidden_user ) {
$( "a:contains('" + hidden_user + "')" ).each( function() {
// doppelte Prüfung
if ( this.text === hidden_user ) {
// Benutzer maskieren / ausblenden (spezifisch für dieses Theme!)
$( this ).closest( "tr" ).remove();
}
});
});
}
});
</script>
@Heliosurge, guter Punkt – es ging hier um die Benutzerliste (/u), aber ich habe es nun aktualisiert, um auch die Seiteninformationen (/about) einzuschließen.
Ich habe den Code so angepasst, dass Sie Seiten angeben können, die maskiert werden sollen, und ob auch ein übergeordneter Container entfernt werden muss.
<script type="text/javascript">
// zu maskierende Seiten (Seite|Elterncontainer)
let mask_pages = ["/directory_items?|tr", "/about.json"];
let mask_users = ["james-admin", "another-admin"];
// wenn eine Seite per AJAX geladen wird
$(document).ajaxComplete(function(event, xhr, settings) {
// prüfen, ob auf der Benutzerliste
mask_pages.forEach(function(mask_page_full_spec) {
// Spezifikation aufteilen
let mask_page_spec = mask_page_full_spec.split("|");
// Seite finden
if (settings.url.startsWith(mask_page_spec[0])) {
mask_users.forEach(function(mask_user) {
// Container holen
let mask_user_elem = $("[data-username='"+mask_user+"']");
// Elterncontainer?
if (mask_page_spec.length == 2) {
mask_user_elem.closest(mask_page_spec[1]).remove();
} else {
mask_user_elem.remove();
}
});
}
});
});
</script>
Mir ist aufgefallen, dass dies für die mobile Version nicht funktioniert. Ändern Sie Folgendes:
// Suche nach <tr> oder <div>, in dieser Reihenfolge
let mask_pages = ["/directory_items?|tr,div", "/about.json"];
// Suche vom Elternelement aus, da closest das Objekt selbst einschließen kann
mask_user_elem.parent().closest(mask_page_spec[1]).remove();
Ich hoffe, das ist für einige von Nutzen. Wie gesagt, bin ich mir sicher, dass ein Plugin ein deutlich besserer Weg wäre, um Benutzer, die ‘Admins’ sind und nicht für ein Kundenforum sichtbar sein möchten, auszublenden.
Mir ist aufgefallen, dass dieses JavaScript auch eine Komponente sein könnte, die zwischen kompatiblen Themes geteilt werden kann. Ich höre jetzt auf, euch alle mit dieser unbedeutenden Funktion zu langweilen – aber sie hat mir sehr geholfen!