it-swarm.com.de

Entfernen Sie Update-Nags für Nicht-Administratoren

Ich versuche, die Update-Nags für Benutzer ohne Administratorrechte zu entfernen oder auszublenden. Als Administrator sehe ich:

 enter image description here 

Die beliebte Antwort, die ich gesehen habe, um damit umzugehen, lautet:

function hide_update_nag() {
    if ( !current_user_can('update_core') ) {
        remove_action( 'admin_notices', 'update_nag', 3 );
    }
}
add_action( 'admin_head', 'hide_update_nag', 1 );

Dies funktioniert gut zum Entfernen der ersten Nachricht (WordPress 4.5.3 ist verfügbar! Bitte aktualisiere es jetzt), aber die zweite Nachricht bleibt für Nichtadministratoren sichtbar:

 enter image description here 

Beide Nachrichten sind in einen <div class="update-nag"> eingeschlossen. Eine Option besteht darin, den obigen Codeabschnitt so zu ändern, dass CSS verwendet wird, um den Fehler zu verbergen mit:

echo '<style>.update-nag {display: none}</style>';

Aber das fühlt sich für mich klobig an. Gibt es eine Möglichkeit, sich an einer Aktion oder einem Filter zu beteiligen und ALLE Aktualisierungsnachrichten für Benutzer ohne Administratorrechte zu entfernen? Bitte keine Plugin-Empfehlungen von Drittanbietern.

12
j08691

In wp-admin/includes/update.php Datei

if ( current_user_can('update_core') )
        $msg = sprintf( __('An automated WordPress update has failed to complete - <a href="%s">please attempt the update again now</a>.'), 'update-core.php' );
    else
        $msg = __('An automated WordPress update has failed to complete! Please notify the site administrator.');

Wir können sehen, dass die Nachrichten je nach aktueller Benutzerrolle unterschiedlich sind und dies maintenance_nag ist.

Grundsätzlich haben wir zwei Update-Nags und können in admin-filters.php gefunden werden

add_action( 'admin_notices', 'update_nag',      3  );
add_action( 'admin_notices', 'maintenance_nag', 10 );

Um die zweite Nachricht zu entfernen, die wir verwenden können (überprüfen Sie auch die aktuelle Benutzerrolle, wenn Sie dies nur für Nicht-Administratoren wünschen)

remove_action( 'admin_notices', 'maintenance_nag', 10 );

Für den Einsatz an mehreren Standorten

remove_action( 'network_admin_notices', 'maintenance_nag', 10 );
16
bravokeyl

hier ist der vollständige Code, der momentan zu funktionieren scheint:

add_action('admin_head', function() {
    if(!current_user_can('manage_options')){
        remove_action( 'admin_notices', 'update_nag',      3  );
        remove_action( 'admin_notices', 'maintenance_nag', 10 );
    }
});
2
T.Todua

@bravokeyl ist wahrscheinlich die beste Antwort auf Ihr unmittelbares Problem.

Aber um das Folgende anzusprechen:

Gibt es eine Möglichkeit, sich an einer Aktion oder einem Filter zu beteiligen und ALLE Aktualisierungsnachrichten für Benutzer ohne Administratorrechte zu entfernen?

Nein. Nag-Nachrichten in WordPress sind nur ein Rückruf zum admin_notices-Hook, mit dem HTML-Code auf die Seite gedruckt wird. Sie sind praktisch gleichbedeutend mit Fehler- oder Erfolgsmeldungen oder anderen "Hinweisen" von WordPress oder einem anderen Plug-In oder Thema in dieser Angelegenheit.

Verstecken Sie die Nags über CSS ist hacky. Es kann auch zu Fehlalarmen kommen, da einige Plugins/Themes fälschlicherweise die Klasse .update-nag verwenden, um ihren eigenen Mitteilungen den gewünschten Stil zu verleihen.

Eine viel weniger hackige Methode ist es, jeden Rückruf, den Sie nicht drucken möchten, explizit zu entfernen (für Nicht-Administratoren). Dies ist jedoch mit (wahrscheinlich sehr geringen) Kosten verbunden, da diese Liste aufrechterhalten und sichergestellt werden muss, dass es keine Hinweise gibt, die „aus dem Ruder laufen“.

1
Stephen Harris