WordPress: Plugin-Menü für Administratoren verschwunden

Problem: Der Menüpunkt „Plugins“ fehlt im WordPress-Backend für Administratoren vollständig. Auch der direkte Aufruf von /wp-admin/plugins.php führt zur Meldung, dass der Benutzer nicht berechtigt ist.

Wichtige Erkenntnis

Das Problem muss nicht durch aktuell ausgeführten Code verursacht werden.

WordPress speichert die Capabilities einer Rolle in der Datenbank. Wurde irgendwann beispielsweise mit remove_cap() das Recht activate_plugins von der Administrator-Rolle entfernt, bleibt diese Änderung bestehen – auch wenn das verantwortliche Plugin oder Snippet später deaktiviert oder gelöscht wird.

Deshalb kann die Ursache weiterhin bestehen, obwohl:

  • das ursprüngliche Plugin gelöscht wurde,
  • Code Snippets deaktiviert sind,
  • keine entsprechende Funktion mehr im Theme vorhanden ist,
  • keine verdächtige MU-Plugin-Logik mehr existiert.

Schnelltest

Direkt aufrufen:

/wp-admin/plugins.php

Wenn WordPress meldet, dass der Benutzer nicht berechtigt ist, fehlt eine entsprechende Capability. Das Menü wurde dann nicht nur optisch ausgeblendet.

Öffnet sich die Plugin-Seite dagegen über die direkte URL, wurde wahrscheinlich lediglich der Menüpunkt entfernt, beispielsweise über remove_menu_page( 'plugins.php' ).

Administrator-Rechte für Plugins wiederherstellen

Folgenden Code vorübergehend ausführen, zum Beispiel über die functions.php des Child-Themes:

add_action( 'init', function() {

	$role = get_role( 'administrator' );

	if ( ! $role ) {
		return;
	}

	$caps = [
		'activate_plugins',
		'install_plugins',
		'update_plugins',
		'delete_plugins',
		'edit_plugins',
	];

	foreach ( $caps as $cap ) {
		$role->add_cap( $cap );
	}

} );

Danach einmal WordPress aufrufen bzw. das Backend neu laden. Die Capabilities werden in der Datenbank gespeichert.

Anschließend den Code wieder entfernen. Er muss nicht dauerhaft ausgeführt werden.

Warum bleibt die Änderung erhalten?

add_cap() und remove_cap() ändern die gespeicherten Eigenschaften der WordPress-Rolle. Sie wirken daher anders als beispielsweise remove_menu_page(), das bei jedem Seitenaufruf erneut ausgeführt werden müsste.

Ein einmal ausgeführtes Snippet wie dieses kann deshalb noch Jahre später Auswirkungen haben:

$role = get_role( 'administrator' );
$role->remove_cap( 'activate_plugins' );

Wird das Snippet anschließend gelöscht, erhält die Administrator-Rolle das Recht nicht automatisch zurück.

Fehlersuche

Wenn „Plugins“ im Backend fehlt:

  1. /wp-admin/plugins.php direkt aufrufen.
  2. Bei einer Berechtigungsfehlermeldung zuerst die Capabilities prüfen.
  3. Nicht davon ausgehen, dass der verursachende Code noch vorhanden sein muss.
  4. Erst wenn die Plugin-Seite direkt erreichbar ist, nach remove_menu_page(), admin_menu oder vergleichbarer Menü-Logik suchen.

Achtung bei Live-Systemen

Wenn Administratoren absichtlich keine Plugins verwalten dürfen, die Rechte nicht pauschal auf dem Live-System wiederherstellen. Bei einer Demo- oder Entwicklungsumgebung können sie gezielt wieder aktiviert werden.