WordPress-Dashboard für Kunden einrichten
Das Öffnen von wp-admin bei einer frischen Installation ist wie das Betreten eines Cockpits, in dem die Hälfte der Knöpfe einen Schleudersitz auslöst. Für Entwickler ist das Unordnung. Für Kunden ist das Angst.
Ein professionelles WordPress-Setup dreht sich nicht nur um das Theme, sondern um das Backend-Erlebnis. Dieser Leitfaden geht das Dashboard so durch, wie WordPress 7.1 es ausliefert, und zeigt dann den Code, mit dem wir es für Kundenkonten verschlanken. Jede Funktion und jeder Hook unten existiert im WordPress-Core und verweist dort, wo es zählt, auf die Entwicklerreferenz.
1. Was steht im Menü des WordPress-Dashboards
1.1 Standard-Widgets auf der Dashboard-Startseite
Wenn Sie sich zum ersten Mal bei WordPress anmelden (ihre-website.de/wp-admin), begrüßt Sie das Dashboard. Das ist Ihre Kommandozentrale, aber sie ist oft mit Widgets überladen, die Sie nie verwenden werden.
Standard-Widgets des Dashboards (mit den IDs, die der Core in wp_dashboard_setup() registriert):
- Willkommen: Schnelle Links für den Einstieg (kein Widget, sondern ein Panel am Action-Hook
welcome_panel) - Auf einen Blick (
dashboard_right_now): Anzahl der Beiträge und Seiten, Theme-Informationen - Aktivität (
dashboard_activity): Zuletzt veröffentlichte Beiträge und neueste Kommentare - Schneller Entwurf (
dashboard_quick_press): Schneller Weg, einen Beitragsentwurf anzulegen - WordPress-Veranstaltungen und Neuigkeiten (
dashboard_primary): Kommende WordCamps und Neuigkeiten - Website-Zustand (
dashboard_site_health): Hinweise zu Sicherheit und Leistung
1.2 Wofür die Menüpunkte in der Admin-Seitenleiste da sind
Die linke Seitenleiste ist Ihr Hauptnavigationsmenü. Jeden Bereich zu verstehen, ist entscheidend:
Beiträge: Dynamische Inhalte mit Datum, Kategorien und Schlagwörtern. Einsatz für: News, Artikel, Updates, Blogeinträge.
Medien: Ihre Dateibibliothek. Bilder, PDFs, Videos, Audiodateien. WordPress sortiert standardmäßig nach Upload-Datum.
Seiten: Statische, hierarchische Inhalte. Einsatz für: Über uns, Kontakt, Leistungen, Datenschutzerklärung.
Kommentare: Alle Kommentare der Website verwalten. Moderation, Spamprüfung, Antworten.
Design: Themes, dazu entweder der Website-Editor (Block-Themes) oder Menüs, Widgets und der Customizer (klassische Themes).
Plugins: Plugins installieren, aktivieren, deaktivieren und konfigurieren.
Benutzer: Benutzerkonten, Rollen und Profile verwalten.
Werkzeuge: Import, Export, Website-Zustand sowie die Bildschirme zum Exportieren und Löschen personenbezogener Daten.
Einstellungen: Zentrale WordPress-Konfiguration. Allgemein, Schreiben, Lesen, Diskussion, Medien, Permalinks.
1.3 Was ist der Unterschied zwischen Beiträgen und Seiten
Hören Sie auf, “chronologisch vs statisch” zu erklären. Das verwirrt. Nutzen Sie diese Analogie:
- Seiten sind Ihr Haus. (Startseite, Über uns, Kontakt). Sie bewegen sich selten.
- Beiträge sind Ihre Zeitung. (News, Artikel, Updates). Jede Woche erscheint eine neue Ausgabe.
Technische Unterschiede:
| Merkmal | Beiträge | Seiten |
|---|---|---|
| Datumsbasierte Archive | Ja | Nein |
| Kategorien | Ja | Nein |
| Schlagwörter | Ja | Nein |
| RSS-Feed | Enthalten | Ausgeschlossen |
| Hierarchisch | Nein | Ja (Eltern/Kind) |
| Vorlagenauswahl | Ja, wenn das Theme Beitragsvorlagen mitbringt | Ja |
Die Vorlagenauswahl für Beiträge kam mit WordPress 4.7, als Vorlagen für Inhaltstypen nicht mehr nur Seiten vorbehalten waren.
2. Ansicht anpassen in WordPress richtig nutzen
Die mächtigste Schaltfläche in WordPress versteckt sich oben rechts: Ansicht anpassen.
2.1 Spalten in der Beitragsliste ausblenden
Bevor Sie eine Website übergeben, gehen Sie zu Beiträge > Alle Beiträge und deaktivieren Sie:
- Kommentare (wenn global deaktiviert)
- Schlagwörter (wenn Sie nur Kategorien verwenden)
- Autor (bei einem Blog mit nur einem Autor)
Das reduziert die kognitive Last. Ihr Kunde muss keine Spalten sehen, die er nie benutzen wird. Im selben Panel steht Einträge pro Seite, das festlegt, wie viele Zeilen die Liste lädt.
2.2 Ansicht anpassen im Beitragseditor
Im klassischen Editor zeigt Ansicht anpassen:
- Kategorien
- Schlagwörter
- Beitragsbild
- Textauszug
- Trackbacks
- Individuelle Felder
- Diskussion
- Titelform
- Autor
Im Block-Editor gibt es die Schaltfläche nicht. Dieselben Bereiche werden dort im Dialog Voreinstellungen des Editors ein- und ausgeschaltet.
Profi-Tipp: Aktivieren Sie Individuelle Felder nur für Redakteure, die sie brauchen. Das Feld zeigt rohe Metadaten des Beitrags, nützlich für fortgeschrittene Inhaltsverwaltung und verwirrend für alle anderen.
2.3 Ansicht anpassen im Seiteneditor
Ähnlich wie bei Beiträgen, aber mit:
- Seiten-Attribute: Übergeordnete Seite, Vorlagenauswahl, Reihenfolge
- Beitragsbild
- Individuelle Felder
- Diskussion
- Titelform
- Autor
3. WordPress-Dashboard anpassen und Widgets entfernen
3.1 Standard-Widgets aus dem Dashboard entfernen
Standardmäßig ist das Haupt-Dashboard (/wp-admin/index.php) ein Friedhof nutzloser Widgets: “WordPress-Veranstaltungen und Neuigkeiten”, “Schneller Entwurf”, “Willkommen”.
Minimieren Sie sie nicht nur. Entfernen Sie sie per Code. Die Widgets laufen über remove_meta_box() am Action-Hook wp_dashboard_setup. Das Willkommen-Panel ist keine Metabox und braucht deshalb remove_action() an seinem eigenen Hook:
function wppoland_clean_dashboard() {
remove_meta_box('dashboard_primary', 'dashboard', 'side'); // WordPress Events and News
remove_meta_box('dashboard_quick_press', 'dashboard', 'side'); // Quick Draft
remove_meta_box('dashboard_activity', 'dashboard', 'normal'); // Activity
}
add_action('wp_dashboard_setup', 'wppoland_clean_dashboard');
// The Welcome panel is printed by wp_welcome_panel() on the welcome_panel action.
// Core adds that action in wp-admin/includes/admin-filters.php, so remove it on admin_init.
add_action('admin_init', function () {
remove_action('welcome_panel', 'wp_welcome_panel');
});3.2 Benutzerdefinierte Dashboard-Widgets hinzufügen
Ersetzen Sie Standard-Widgets mit wp_add_dashboard_widget() durch nützliche Informationen für den Kunden:
function wppoland_add_custom_dashboard_widget() {
wp_add_dashboard_widget(
'wppoland_client_widget',
'Welcome to Your Website',
'wppoland_client_widget_content'
);
}
add_action('wp_dashboard_setup', 'wppoland_add_custom_dashboard_widget');
function wppoland_client_widget_content() {
echo '<p>Welcome! Need help? Contact support at [email protected]</p>';
echo '<p>Documentation: <a href="https://docs.example.com">View Guides</a></p>';
}3.3 Eigenes Admin-Farbschema hinzufügen
WordPress 7.1 registriert in register_admin_color_schemes() neun Admin-Farbschemata. Benutzer wählen eines unter Benutzer > Profil:
- Standard
- Frisch
- Hell
- Blau
- Mitternacht
- Sonnenaufgang
- Ektoplasma
- Meer
- Kaffee
Eigenes Farbschema per Code mit wp_admin_css_color():
function wppoland_custom_admin_colors() {
wp_admin_css_color(
'wppoland',
'WPPoland Brand',
get_stylesheet_directory_uri() . '/admin-colors.css',
['#1e1e1e', '#ff6b6b', '#4ecdc4', '#ffe66d']
);
}
add_action('admin_init', 'wppoland_custom_admin_colors');4. Admin-Menü nach Benutzerrolle ausblenden
Verschiedene Benutzerrollen sehen verschiedene Bereiche des Dashboards. Das zu verstehen, ist für Kundenwebsites entscheidend.
4.1 Welche Admin-Menüs jede Benutzerrolle sieht
Der Core entscheidet das in wp-admin/menu.php anhand von Berechtigungen, nicht anhand des Rollennamens. Mit den Standard-Rollen und Berechtigungen:
Administrator: Voller Zugriff auf alle Menüpunkte Redakteur: Dashboard, Beiträge, Medien, Seiten, Kommentare, Profil, Werkzeuge Autor: Dashboard, Beiträge, Medien, Kommentare, Profil, Werkzeuge Mitarbeiter: Dashboard, Beiträge (eigene erstellen und bearbeiten, aber nicht veröffentlichen), Kommentare, Profil, Werkzeuge Abonnent: Dashboard, Profil
Werkzeuge erscheint für jede Rolle mit edit_posts, weil der Hauptmenüpunkt genau diese Berechtigung verlangt. Was darin liegt (Import, Export, Website-Zustand), hat eigene, strengere Prüfungen.
4.2 Admin-Menüpunkte für Nicht-Administratoren ausblenden
Wenn Ihr Kunde Werkzeuge oder Einstellungen nicht anfassen soll, blenden Sie diese Punkte aus. Sie können zwar Plugins wie Admin Menu Editor verwenden, aber ein einfaches Snippet ist sicherer und leichter:
add_action('admin_menu', function() {
if (!current_user_can('manage_options')) {
remove_menu_page('tools.php');
remove_menu_page('options-general.php');
}
});Ausblenden ist keine Zugriffskontrolle. remove_menu_page() entfernt nur den Eintrag aus dem globalen Array $menu, wie der Quellcode in der Referenz zeigt. Die Berechtigungsprüfung des Bildschirms bleibt unverändert, ein Benutzer mit der Berechtigung kann ihn also weiter per URL öffnen. Wenn eine Rolle einen Bildschirm nicht erreichen darf, entziehen Sie der Rolle die Berechtigung.
4.3 Einzelne Untermenüpunkte ausblenden
function wppoland_hide_submenu_items() {
if (!current_user_can('manage_options')) {
remove_submenu_page('themes.php', 'themes.php'); // Theme selection
remove_submenu_page('themes.php', 'customize.php'); // Customizer
}
}
add_action('admin_menu', 'wppoland_hide_submenu_items', 999);Die Datei-Editoren schalten Sie besser mit einer Konstante ab, siehe Abschnitt 7.1.
5. Metaboxen in WordPress entfernen und hinzufügen
5.1 Was sind Metaboxen in WordPress
Metaboxen sind die Inhaltsboxen in den Beitrags- und Seiteneditoren:
- Veröffentlichen: Speichern, Vorschau, Planung, Sichtbarkeit
- Beitragsformat: Auswahl des Beitragsformats
- Kategorien: Zuordnung der Taxonomie
- Schlagwörter: Verwaltung der Schlagwörter
- Beitragsbild: Vorschaubild des Beitrags
- Textauszug: Manueller Auszug
5.2 Metaboxen neu anordnen
Benutzer können Metaboxen per Drag-and-drop an ihren Arbeitsablauf anpassen. WordPress merkt sich diese Positionen pro Benutzer, in den Benutzer-Metadaten mit dem Bildschirm als Schlüssel (meta-box-order_post, closedpostboxes_post, metaboxhidden_post).
5.3 Metaboxen per Code entfernen
function wppoland_remove_post_metaboxes() {
remove_meta_box('postcustom', 'post', 'normal'); // Custom fields
remove_meta_box('trackbacksdiv', 'post', 'normal'); // Trackbacks
remove_meta_box('commentstatusdiv', 'post', 'normal'); // Discussion
remove_meta_box('commentsdiv', 'post', 'normal'); // Comments
remove_meta_box('slugdiv', 'post', 'normal'); // Slug
remove_meta_box('authordiv', 'post', 'normal'); // Author
}
add_action('add_meta_boxes', 'wppoland_remove_post_metaboxes', 99);Diese IDs gehören zum Bildschirm des klassischen Editors. Im Block-Editor liegen die meisten dieser Einstellungen in den Bereichen der Seitenleiste, und Metaboxen von Plugins erscheinen unterhalb des Inhaltsbereichs.
5.4 Eigene Metaboxen hinzufügen
function wppoland_add_custom_metabox() {
add_meta_box(
'wppoland_custom_metabox',
'Additional Information',
'wppoland_render_custom_metabox',
'post',
'side',
'default'
);
}
add_action('add_meta_boxes', 'wppoland_add_custom_metabox');
function wppoland_render_custom_metabox($post) {
wp_nonce_field('wppoland_save_metabox', 'wppoland_metabox_nonce');
$value = get_post_meta($post->ID, '_wppoland_custom_field', true);
echo '<label for="wppoland_custom_field">Custom Field:</label>';
echo '<input type="text" id="wppoland_custom_field" name="wppoland_custom_field" value="' . esc_attr($value) . '" style="width:100%">';
}
function wppoland_save_custom_metabox($post_id) {
if (!isset($_POST['wppoland_metabox_nonce'])
|| !wp_verify_nonce($_POST['wppoland_metabox_nonce'], 'wppoland_save_metabox')
|| !current_user_can('edit_post', $post_id)) {
return;
}
if (isset($_POST['wppoland_custom_field'])) {
update_post_meta($post_id, '_wppoland_custom_field', sanitize_text_field(wp_unslash($_POST['wppoland_custom_field'])));
}
}
add_action('save_post', 'wppoland_save_custom_metabox');Die in der Metabox ausgegebene Nonce nützt nur etwas, wenn die Speicherfunktion sie prüft, zusammen mit dem Recht des Benutzers, genau diesen Beitrag zu bearbeiten.
6. WordPress-Admin-Menü sortieren und umbenennen
6.1 Menüpunkte neu anordnen
function wppoland_custom_menu_order($menu_order) {
if (!$menu_order) return true;
return [
'index.php', // Dashboard
'edit.php', // Posts
'edit.php?post_type=page', // Pages
'upload.php', // Media
'separator1',
'themes.php', // Appearance
'plugins.php', // Plugins
'users.php', // Users
'tools.php', // Tools
'options-general.php', // Settings
];
}
add_filter('custom_menu_order', '__return_true');
add_filter('menu_order', 'wppoland_custom_menu_order');6.2 Menüpunkte umbenennen
function wppoland_rename_menus() {
global $menu;
$menu[5][0] = 'Articles'; // Rename Posts to Articles
$menu[10][0] = 'Files'; // Rename Media to Files
}
add_action('admin_menu', 'wppoland_rename_menus', 999);Die Positionen 5 (Beiträge) und 10 (Medien) sind die Plätze, die der Core in wp-admin/menu.php vergibt. Ein Plugin, das sein eigenes Menü auf derselben Position registriert, kann sie verschieben. Prüfen Sie das Ergebnis deshalb nach jeder Plugin-Installation.
6.3 Benutzerdefinierte Menüpunkte hinzufügen
function wppoland_add_custom_menu() {
add_menu_page(
'Client Documentation',
'Documentation',
'read',
'client-docs',
'wppoland_render_docs_page',
'dashicons-book',
3
);
}
add_action('admin_menu', 'wppoland_add_custom_menu');
function wppoland_render_docs_page() {
echo '<div class="wrap"><h1>Client Documentation</h1>';
echo '<p>Welcome to your website documentation...</p></div>';
}6.4 Eigene Icons für Admin-Menüpunkte
WordPress bringt standardmäßig Dashicons mit. Verwenden Sie diese oder eigene SVGs:
// Using Dashicons
add_menu_page('Custom Page', 'Custom', 'read', 'custom-page', 'callback', 'dashicons-star-filled');
// Using custom SVG
function wppoland_custom_admin_icon() {
echo '<style>
#toplevel_page_custom-page .wp-menu-image:before {
content: "";
background-image: url("' . esc_url(get_stylesheet_directory_uri() . '/icon.svg') . '");
background-size: contain;
background-repeat: no-repeat;
width: 20px;
height: 20px;
display: inline-block;
}
</style>';
}
add_action('admin_head', 'wppoland_custom_admin_icon');add_menu_page() akzeptiert als Icon-Argument auch eine base64-kodierte SVG-Data-URI, was das zusätzliche CSS erspart.
7. WordPress-Backend für Kunden einschränken
7.1 Theme- und Plugin-Editor für Kunden ausblenden
Die Editor-Menüpunkte von admin_init aus auszuhängen, funktioniert nicht, weil admin_menu zu diesem Zeitpunkt schon gelaufen ist. Der dokumentierte Schalter ist eine Konstante in der wp-config.php, beschrieben in der Referenz zur wp-config.php:
// wp-config.php
define('DISALLOW_FILE_EDIT', true); // removes the theme and plugin file editors for everyone
// Stricter: also blocks installing, updating and deleting plugins and themes from the admin
// define('DISALLOW_FILE_MODS', true);DISALLOW_FILE_EDIT bildet die Berechtigungen edit_themes, edit_plugins und edit_files auf do_not_allow ab, sodass selbst Administratoren die Editoren verlieren. DISALLOW_FILE_MODS geht weiter und schaltet auch Aktualisierungen aus dem Dashboard ab. Das ist nur sinnvoll, wenn Updates über Deployments oder WP-CLI ausgeliefert werden.
Um den Hinweis auf Core-Updates vor Nicht-Administratoren zu verbergen, hängen Sie ihn von admin_notices ab, wo der Core ihn mit Priorität 3 einhängt:
add_action('admin_init', function () {
if (!current_user_can('update_core')) {
remove_action('admin_notices', 'update_nag', 3);
}
});7.2 Benutzerdefinierte Login-Weiterleitung
Leiten Sie Kunden nach dem Login auf eine bestimmte Seite weiter:
function wppoland_login_redirect($redirect_to, $request, $user) {
if (isset($user->roles) && is_array($user->roles)) {
if (in_array('editor', $user->roles)) {
return admin_url('edit.php');
} elseif (in_array('author', $user->roles)) {
return admin_url('post-new.php');
}
}
return $redirect_to;
}
add_filter('login_redirect', 'wppoland_login_redirect', 10, 3);7.3 Text in der Admin-Fußzeile ändern
Ersetzen Sie "Danke für deine Unterstützung von WordPress" durch Ihr eigenes Branding. admin_footer_text ist ein Filter, deshalb gibt die Callback-Funktion den Text zurück, statt ihn auszugeben:
function wppoland_custom_admin_footer($text) {
return '<span id="footer-thankyou">Need help? Contact us at [email protected]</span>';
}
add_filter('admin_footer_text', 'wppoland_custom_admin_footer');7.4 WordPress-Version aus der Admin-Fußzeile entfernen
function wppoland_remove_wp_version() {
remove_filter('update_footer', 'core_update_footer');
}
add_action('admin_menu', 'wppoland_remove_wp_version');8. Gutenberg-Block-Editor deaktivieren oder anpassen
8.1 Das Design-Menü in Block-Themes (FSE)
In Block-Themes ändert sich das Menü Design deutlich. In WordPress 7.1 zeigt es:
- Themes: Auswahl des Themes
- Editor: Der Website-Editor, in dem Navigation, Stile, Seiten, Templates und wiederverwendbare Blockvorlagen bearbeitet werden
- Schriften: Die Schriftenbibliothek
Der Link zum Customizer erscheint in einem Block-Theme nur, wenn ein Plugin oder das Theme sich in customize_register einhängt. Klassische Themes mit Editor-Stilen bekommen statt Editor einen Punkt Design, alle übrigen einen Punkt Vorlagen.
8.2 Block-Editor für bestimmte Beitragstypen deaktivieren
function wppoland_disable_gutenberg($use_block_editor, $post_type) {
if ($post_type === 'page') {
return false; // Use classic editor for pages
}
return $use_block_editor;
}
add_filter('use_block_editor_for_post_type', 'wppoland_disable_gutenberg', 10, 2);8.3 Eigene Skripte im Block-Editor laden
function wppoland_enqueue_block_assets() {
wp_enqueue_script(
'wppoland-block-editor',
get_stylesheet_directory_uri() . '/block-editor.js',
['wp-blocks', 'wp-dom-ready', 'wp-edit-post'],
filemtime(get_stylesheet_directory() . '/block-editor.js')
);
}
add_action('enqueue_block_editor_assets', 'wppoland_enqueue_block_assets');9. Häufige Probleme im WordPress-Dashboard beheben
9.1 Weißer Bildschirm im Admin
- Alle Plugins per FTP deaktivieren (Ordner
/pluginsumbenennen) - Zum Standard-Theme wechseln
- PHP-Fehlerprotokolle prüfen
- Speicherlimit erhöhen
9.2 Warum fehlen Menüpunkte im WordPress-Admin
- Berechtigungen der Benutzerrolle prüfen
- Plugin-Konflikte
- Eigener Code, der Menüs entfernt
9.3 Warum ist das WordPress-Dashboard langsam
- Kein persistenter Objekt-Cache
- Zu viele Dashboard-Widgets, die externe Dienste abfragen
- Last durch Plugins
- Aufgeblähte Datenbank
9.4 Warum Ansicht-anpassen-Einstellungen nicht gespeichert werden
Die Einstellungen aus Ansicht anpassen werden pro Benutzer in den Benutzer-Metadaten gespeichert: manage{screen}columnshidden für Listenspalten, metaboxhidden_{screen} und closedpostboxes_{screen} für Boxen. Wenn sie nicht mehr gespeichert werden, prüfen Sie:
- Ein Plugin oder eine Cache-Schicht, die die admin-ajax-Anfrage stört, mit der sie gespeichert werden
- Einen Objekt-Cache, der veraltete Benutzer-Metadaten ausliefert
- Plugin-Konflikte
10. WordPress-Admin mit 2FA und IP-Sperre absichern
Die Absicherung des WordPress-Dashboards ist entscheidend für den Schutz der gesamten Website. Diese Maßnahmen setzen auf den grundlegenden Härtungstechniken auf.
10.1 Zwei-Faktor-Authentifizierung (2FA) für wp-admin
Die Zwei-Faktor-Authentifizierung fügt nach dem Passwort eine zweite Prüfung hinzu. Der WordPress-Core bringt keine 2FA mit. Die schmalste Option ist das Plugin Two Factor, veröffentlicht unter dem Konto von WordPress.org und im Plugin-Verzeichnis in Version 0.17.0 gelistet (benötigt WordPress 7.0, getestet bis 7.1.3 zum Zeitpunkt dieses Textes). Es fügt 2FA hinzu und sonst nichts, was zu einem Setup ohne All-in-one-Sicherheitspakete passt.
Was es laut seiner Seite im Verzeichnis bietet:
- Authenticator-App (TOTP): Codes aus Apps wie Google Authenticator, Authy oder 1Password
- Backup-Codes: zehn Einmalcodes für Notfälle
- E-Mail-Codes: Einmalcodes an die E-Mail-Adresse des Kontos
Jeder Benutzer aktiviert es im eigenen Profil. Administratoren können es für andere Benutzer einrichten und einzelne Methoden in den Plugin-Einstellungen unter Einstellungen für die ganze Website abschalten. Bitten Sie jeden Kunden-Benutzer, am ersten Tag Backup-Codes zu erzeugen, denn ein verlorenes Telefon bedeutet sonst ein Support-Ticket. Den größeren Zusammenhang beschreibt der WordPress-Leitfaden zur Multi-Faktor-Authentifizierung.
10.2 Einschränken des Admin-Zugriffs nach IP-Adresse
Die Beschränkung des Admin-Zugriffs auf bestimmte IP-Adressen verhindert unbefugten Zugriff von unbekannten Standorten. Eine Sperre in PHP muss AJAX-Anfragen auslassen, weil Funktionen im Frontend admin-ajax.php aufrufen, das ebenfalls als Admin zählt:
// Restrict wp-admin by IP
function wppoland_restrict_admin_by_ip() {
if (wp_doing_ajax()) {
return;
}
$allowed_ips = ['192.0.2.10', '203.0.113.50'];
$user_ip = $_SERVER['REMOTE_ADDR'] ?? '';
if (!in_array($user_ip, $allowed_ips, true)) {
wp_die(
__('Access denied. Your IP address is not authorized.', 'wppoland'),
__('Access Denied', 'wppoland'),
['response' => 403]
);
}
}
add_action('admin_init', 'wppoland_restrict_admin_by_ip');Hinter einem Proxy oder CDN enthält REMOTE_ADDR die Adresse des Proxys. Die Prüfung muss dann die Adresse lesen, die der Proxy weiterreicht, und zwar nur von Proxys, denen Sie vertrauen.
IP-Beschränkung per .htaccess (Syntax von Apache 2.4, siehe den Leitfaden zur Zugriffskontrolle von Apache):
# Restrict wp-login.php by IP
<Files wp-login.php>
Require ip 192.0.2.10 203.0.113.50
</Files>Die älteren Direktiven Order Deny,Allow gehören zu Apache 2.2 und funktionieren in 2.4 nur über das Kompatibilitätsmodul.
10.3 WordPress-Login-URL ändern
Der Core hat keine Einstellung für eine eigene Login-URL. Der Filter login_url ändert die Links, die WordPress ausgibt, aber wp-login.php antwortet weiterhin. Snippets, die eine Rewrite-Regel anlegen und bei jedem init flush_rewrite_rules() aufrufen, sind ein schlechter Tausch: Die Funktionsreferenz nennt das Leeren eine teure Operation, die nur bei Bedarf laufen soll. Begrenzen Sie stattdessen die Anfragen an wp-login.php auf dem Server und ergänzen Sie 2FA. Das schützt den Login, ohne ihn zu verstecken.
10.4 Sicherheitsheader für wp-admin
Der Core sendet bei jeder Admin-Anfrage bereits drei Header: X-Frame-Options: SAMEORIGIN und Content-Security-Policy: frame-ancestors 'self' aus send_frame_options_header() sowie Referrer-Policy: strict-origin-when-cross-origin aus wp_admin_headers(). Was noch zu ergänzen bleibt, ist wenig:
function wppoland_admin_security_headers() {
if (!headers_sent()) {
header('X-Content-Type-Options: nosniff');
}
}
add_action('admin_init', 'wppoland_admin_security_headers');Lassen Sie X-XSS-Protection weg: MDN führt den Header als nicht standardisiert und warnt, dass er auf ansonsten sicheren Websites XSS-Lücken erzeugen kann. Eine vollständige Content Security Policy für wp-admin braucht unsafe-inline, weil der Core Inline-Skripte ausgibt, und bringt dort deshalb wenig.
11. Langsames WordPress-Backend beschleunigen
Ein langsames Admin-Dashboard kostet Produktivität und Nutzererlebnis. Diese Änderungen setzen bei den üblichen Ursachen an.
11.1 Aufwendige Dashboard-Widgets verzögert laden
Dashboard-Widgets, die externe Dienste abfragen, bremsen den ersten Bildschirm nach dem Login. “WordPress-Veranstaltungen und Neuigkeiten” lädt Daten von WordPress.org, Widgets von Plugins fragen oft ihre eigenen APIs ab. Sie zu entfernen, ist die Lösung:
function wppoland_optimize_dashboard_widgets() {
// Remove WordPress Events and News (makes an external request)
remove_meta_box('dashboard_primary', 'dashboard', 'side');
// Remove Quick Draft (unnecessary for most clients)
remove_meta_box('dashboard_quick_press', 'dashboard', 'side');
// Only load Activity widget for users who need it
if (!current_user_can('edit_posts')) {
remove_meta_box('dashboard_activity', 'dashboard', 'normal');
}
}
add_action('wp_dashboard_setup', 'wppoland_optimize_dashboard_widgets');11.2 Reduzieren von Datenbankabfragen im Admin
Ändern Sie nicht die Hauptabfrage der Admin-Listen: Wer fields => ids oder no_found_rows erzwingt, zerstört die Beitragstabelle und ihre Seitennummerierung. Der sichere Hebel ist die Zahl der Zeilen pro Bildschirm. Benutzer stellen sie unter Ansicht anpassen ein, eine websiteweite Obergrenze setzt der Filter edit_posts_per_page:
add_filter('edit_posts_per_page', function ($per_page, $post_type) {
return min($per_page, 50);
}, 10, 2);11.3 Objekt-Caching im WordPress-Admin
define('WP_CACHE', true) schaltet kein Objekt-Caching ein. Die Konstante sagt WordPress, dass es das Seiten-Cache-Drop-in advanced-cache.php laden soll. Ein persistenter Objekt-Cache ist ein anderes Drop-in, wp-content/object-cache.php, bereitgestellt von einem Redis- oder Memcached-Backend. Ohne es lebt WP_Object_Cache nur für eine Anfrage. Seit WordPress 6.1 empfiehlt Werkzeuge > Website-Zustand einen persistenten Objekt-Cache, wenn die Website groß genug wirkt, um davon zu profitieren.
11.4 Unnötige Admin-Skripte und -Stile entfernen
Seit WordPress 6.4 werden Emoji-Stile im Admin über wp_enqueue_emoji_styles an admin_enqueue_scripts geladen. Wenn die Website im Admin keine Emoji-Unterstützung braucht:
// Core adds these in wp-admin/includes/admin-filters.php, so remove them on admin_init
add_action('admin_init', function () {
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('admin_enqueue_scripts', 'wp_enqueue_emoji_styles');
});Deregistrieren Sie keine Core-Handles wie dashboard, media-editor oder media-views auf allen Admin-Bildschirmen. Sie steuern das Verschieben von Widgets und das Medienfenster, und andere Bildschirme hängen von ihnen ab.
12. WordPress-Admin barrierefrei machen
Eine barrierefreie Admin-Oberfläche sorgt dafür, dass alle Benutzer ihre Website unabhängig von körperlichen Fähigkeiten verwalten können.
12.1 Tastaturnavigation im WordPress-Admin
Der Core gibt oben auf jedem Admin-Bildschirm bereits zwei Sprunglinks aus, “Zum Hauptinhalt springen” und “Zur Werkzeugleiste springen”, eigene Links sind also nicht nötig. Jeder Benutzer kann in seinem Profil außerdem Tastaturbefehle aktivieren, die Kurzbefehle für die Kommentarmoderation freischalten. Eigene Admin-Seiten sollten die sichtbare Fokusmarkierung des Core behalten, statt sie im CSS zu entfernen.
12.2 Screenreader-Unterstützung im WordPress-Admin
Screenreader lesen zuerst den Seitentitel vor, deshalb hilft ein klarer <title> auf jedem Bildschirm. Der Filter admin_title erhält den vollständigen Titel und den Titel des Bildschirms:
// Add descriptive titles to pages
function wppoland_admin_title($admin_title, $title) {
return sprintf('%s | %s', $title, esc_html(get_bloginfo('name')));
}
add_filter('admin_title', 'wppoland_admin_title', 10, 2);Verwenden Sie auf eigenen Admin-Seiten echte <label>-Elemente für Formularfelder und genau eine <h1> pro Bildschirm, so wie die Core-Bildschirme.
12.3 Hochkontrastmodus im WordPress-Admin
Stellen Sie sicher, dass das Dashboard mit Hochkontrastmodi funktioniert:
// Support forced colors mode
function wppoland_forced_colors_support() {
echo '<style>
@media (forced-colors: active) {
.button, .button-primary, .button-secondary {
border: 2px solid ButtonText;
}
.wp-core-ui .button-primary {
background-color: Mark;
}
.metabox-holder .postbox {
border: 1px solid CanvasText;
}
}
/* Reduced motion preferences */
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
</style>';
}
add_action('admin_head', 'wppoland_forced_colors_support');13. Netzwerk-Admin in WordPress Multisite
WordPress Multisite bringt zusätzliche Komplexität in Navigation und Verwaltung des Dashboards.
13.1 Unterschied zwischen Netzwerk-Admin und Website-Admin
In Multisite-Installationen bekommen Super-Admins eine eigene Netzwerkverwaltung mit eigenem Menü:
Menüpunkte der Netzwerkverwaltung:
- Dashboard: Überblick über das ganze Netzwerk, mit Aktualisierungen als Untermenü
- Websites: Alle Websites im Netzwerk verwalten
- Benutzer: Benutzerverwaltung für das ganze Netzwerk
- Themes: Themes netzwerkweit aktivieren
- Plugins: Plugins netzwerkweit verwalten
- Einstellungen: Konfiguration des Netzwerks
Website-spezifischer Admin: Administratoren einzelner Websites sehen nur das Dashboard ihrer Website mit den Standard-Menüpunkten. Sie können keine Plugins oder Themes installieren, diese Berechtigungen bleiben bei den Super-Admins.
13.2 Eigene Menüpunkte im Multisite-Netzwerk-Admin
Die Bildschirme der Netzwerkverwaltung haben einen eigenen Hook, network_admin_menu, und die Berechtigung manage_network beschränkt die Seite auf Super-Admins:
// Add custom network admin menu item
function wppoland_multisite_network_menu() {
add_menu_page(
__('Network Analytics', 'wppoland'),
__('Analytics', 'wppoland'),
'manage_network',
'network-analytics',
'wppoland_network_analytics_page',
'dashicons-chart-bar',
3
);
}
add_action('network_admin_menu', 'wppoland_multisite_network_menu');Super-Admins erreichen die Netzwerkverwaltung bereits über das Menü Meine Websites in der Werkzeugleiste. Ein zusätzlicher Link im Menü jeder Website ist nicht nötig.
13.3 Website-spezifische Dashboard-Widgets in Multisite
Website-spezifische Dashboard-Widgets in Multisite anlegen:
// Add site-specific dashboard widget
function wppoland_multisite_site_widget() {
wp_add_dashboard_widget(
'site_info_widget',
sprintf(__('%s Site Information', 'wppoland'), esc_html(get_bloginfo('name'))),
'wppoland_site_widget_content'
);
}
add_action('wp_dashboard_setup', 'wppoland_multisite_site_widget');
function wppoland_site_widget_content() {
$blog_details = get_blog_details(get_current_blog_id());
echo '<table class="widefat striped">';
echo '<tr><th>' . esc_html__('Domain', 'wppoland') . '</th><td>' . esc_html($blog_details->domain . $blog_details->path) . '</td></tr>';
echo '<tr><th>' . esc_html__('Registered', 'wppoland') . '</th><td>' . esc_html($blog_details->registered) . '</td></tr>';
echo '<tr><th>' . esc_html__('Last Updated', 'wppoland') . '</th><td>' . esc_html($blog_details->last_updated) . '</td></tr>';
echo '</table>';
}Das Feld domain enthält einen Hostnamen ohne Schema, deshalb wird es als Text maskiert, nicht als URL.
14. Admin-Anpassungen organisieren und dokumentieren
Dashboard-Code, der in der functions.php eines Themes verteilt ist, verschwindet an dem Tag, an dem der Kunde das Theme wechselt. Legen Sie ihn dort ab, wo er überlebt.
14.1 Wohin mit dem Code für Dashboard-Anpassungen
Bündeln Sie alle Dashboard-Anpassungen in einem Must-use-Plugin. Must-use-Plugins laden automatisch und lassen sich auf dem Plugins-Bildschirm nicht deaktivieren, genau das, was Code zum Schutz des Kunden-Backends braucht. WordPress lädt nur PHP-Dateien, die direkt in mu-plugins liegen, deshalb bindet eine Ladedatei den Rest ein:
<?php
/**
* Plugin Name: WPPoland Dashboard Customizer
* Description: Dashboard customization for client sites
* Version: 1.0.0
* Author: WPPoland
* Text Domain: wppoland
*/
// File: wp-content/mu-plugins/wppoland-dashboard-customizer.php
// Prevent direct access
if (!defined('ABSPATH')) exit;
define('WPPOLAND_DASHBOARD_VERSION', '1.0.0');
define('WPPOLAND_DASHBOARD_PATH', __DIR__ . '/wppoland-dashboard/');
// Include customization modules
require_once WPPOLAND_DASHBOARD_PATH . 'cleanup.php';
require_once WPPOLAND_DASHBOARD_PATH . 'customization.php';
require_once WPPOLAND_DASHBOARD_PATH . 'security.php';
require_once WPPOLAND_DASHBOARD_PATH . 'performance.php';14.2 Versionierung von Dashboard-Anpassungen
Verfolgen Sie alle Änderungen am Dashboard und sehen Sie einen Update-Mechanismus vor:
// Dashboard customization version tracking
function wppoland_get_dashboard_version() {
return get_option('wppoland_dashboard_version', '1.0.0');
}
function wppoland_update_dashboard_settings() {
$current_version = wppoland_get_dashboard_version();
$plugin_version = WPPOLAND_DASHBOARD_VERSION;
if (version_compare($current_version, $plugin_version, '<')) {
// Run your own update routine here, then store the new version
update_option('wppoland_dashboard_version', $plugin_version);
}
}
add_action('plugins_loaded', 'wppoland_update_dashboard_settings');Halten Sie das Must-use-Plugin im selben Git-Repository wie den übrigen Code der Website, damit jede Änderung am Kunden-Backend einen Commit und einen Grund hat.
14.3 Hilfe-Tab für Kunden im Dashboard hinzufügen
Jeder Admin-Bildschirm hat neben Ansicht anpassen einen Tab Hilfe. WP_Screen::add_help_tab() fügt dort eigene Inhalte hinzu. Der Hook load-index.php beschränkt den Tab auf den Dashboard-Bildschirm:
// Add help tab to the Dashboard screen
function wppoland_add_dashboard_help_tab() {
$screen = get_current_screen();
$screen->add_help_tab([
'id' => 'wppoland_dashboard_help',
'title' => __('Dashboard Guide', 'wppoland'),
'content' => '<h3>' . __('How to Use Your Dashboard', 'wppoland') . '</h3>' .
'<p>' . __('This guide will help you navigate and manage your WordPress site.', 'wppoland') . '</p>' .
'<ul>' .
'<li><a href="edit.php">' . __('Manage Posts', 'wppoland') . '</a></li>' .
'<li><a href="edit.php?post_type=page">' . __('Manage Pages', 'wppoland') . '</a></li>' .
'<li><a href="upload.php">' . __('Media Library', 'wppoland') . '</a></li>' .
'</ul>'
]);
}
add_action('load-index.php', 'wppoland_add_dashboard_help_tab');15. Häufige Fragen zum WordPress-Dashboard für Entwickler
Wie setze ich das Dashboard für einen Benutzer auf den Standard zurück Ansicht anpassen, Reihenfolge und eingeklappte Boxen liegen in den Metadaten dieses Benutzers, unter den Schlüsseln aus Abschnitt 9.4. Löschen Sie sie, und die Bildschirme fallen auf die Standardwerte zurück. Mit WP-CLI zeigt wp user meta list <user> die Schlüssel, und wp user meta delete <user> <key> entfernt einen davon. Websiteweite Änderungen per Code verschwinden erst, wenn Sie diesen Code entfernen.
Kann ich komplett eigene Admin-Seiten erstellen Ja. add_menu_page() und add_submenu_page() registrieren einen Bildschirm mit Ihrer eigenen Callback-Funktion, wie in Abschnitt 6.3. Setzen Sie als Berechtigung die niedrigste, die die Seite sehen soll.
Wie blende ich die Admin-Leiste für bestimmte Benutzer aus Jeder Benutzer kann in seinem Profil “Werkzeugleiste für mich auf der Website anzeigen” abschalten. Für eine ganze Rolle geben Sie im Filter show_admin_bar false zurück, wenn current_user_can() Ihre Prüfung nicht besteht. Das betrifft nur das Frontend, die Werkzeugleiste in wp-admin bleibt.
Können Kunden die Website über das Dashboard beschädigen Ein Administratorkonto kann das: Es kann Theme-Dateien bearbeiten, Plugins installieren und Permalinks ändern. Geben Sie Kunden wo möglich die Rolle Redakteur, setzen Sie DISALLOW_FILE_EDIT (Abschnitt 7.1) und behalten Sie Administratorkonten denjenigen vor, die die Website warten.
Was ist der Unterschied zwischen Redakteur und Autor Ein Autor veröffentlicht und verwaltet seine eigenen Beiträge und lädt Medien hoch. Ein Redakteur verwaltet die Beiträge und Seiten aller, moderiert Kommentare und verwaltet Kategorien. Abschnitt 4.1 listet, welche Menüs jede Rolle sieht.
Wie stelle ich versehentlich gelöschte Inhalte wieder her Gelöschte Beiträge und Seiten landen zuerst im Papierkorb. WordPress leert ihn standardmäßig nach 30 Tagen, gesteuert über die Konstante EMPTY_TRASH_DAYS. Danach kommen die Inhalte nur noch aus einem Backup zurück.
Warum lädt mein Dashboard langsam Die üblichen Ursachen sind Dashboard-Widgets, die externe Dienste abfragen, ein fehlender persistenter Objekt-Cache und Last durch Plugins. Die Abschnitte 11.1 und 11.3 behandeln die ersten beiden.
Wie verhindere ich, dass Kunden eigene Plugins installieren Geben Sie ihnen nicht die Rolle Administrator, denn auf einer Einzelwebsite haben nur Administratoren install_plugins. Wenn ein Administratorkonto unvermeidbar ist, blockiert DISALLOW_FILE_MODS Installationen und Updates aus dem Dashboard für alle (Abschnitt 7.1).
Wie füge ich Admin-Seiten Hilfe-Tabs hinzu Rufen Sie get_current_screen()->add_help_tab() am load--Hook des gewünschten Bildschirms auf, wie in Abschnitt 14.3.
Kann ich das Dashboard pro Benutzer anpassen Ja. Benutzer steuern ihre eigenen Einstellungen in Ansicht anpassen, die Reihenfolge der Boxen, das Farbschema und die Sichtbarkeit der Werkzeugleiste. Code kann nach get_current_user_id() verzweigen oder, besser, nach einer Berechtigung, damit das Setup der Rolle folgt und nicht einer einzelnen Person.
Wie aktiviere ich automatische Plugin-Updates für Kunden Seit WordPress 5.5 hat der Plugins-Bildschirm pro Plugin den Link “Automatische Aktualisierungen aktivieren”. Im Code gibt der Filter auto_update_plugin true zurück, um alle Plugins zu aktualisieren, oder entscheidet pro Plugin. Beachten Sie, dass DISALLOW_FILE_MODS automatische Updates abschaltet.
Kann ich Dashboard-Einstellungen exportieren, um sie auf anderen Websites zu verwenden Nicht über einen Core-Bildschirm. Der zuverlässige Weg ist, die Anpassungen im Must-use-Plugin aus Abschnitt 14.1 zu halten und dieses Plugin auf jede Website zu kopieren.
Wie gehe ich mit Dashboard-Problemen beim Theme-Wechsel um Code in der functions.php des Themes verschwindet mit dem Theme, das Dashboard kehrt nach einem Wechsel also zu den Standardwerten zurück. Das ist der Hauptgrund, Admin-Code in ein Must-use-Plugin zu legen.
Zusammenfassung
Ein generisches Dashboard sagt “Ich habe ein Theme installiert.” Ein kuratiertes Dashboard sagt “Ich habe eine Plattform für Ihr Unternehmen gebaut.” Investieren Sie die Zeit, um es aufzuräumen.
Wichtige Erkenntnisse:
- Ansicht anpassen verwenden, um aufzuräumen
- Nach Benutzerrolle anpassen und Berechtigungen entziehen, wo Ausblenden nicht reicht
- Die Datei-Editoren mit
DISALLOW_FILE_EDITabschalten - Hilfreiche benutzerdefinierte Widgets hinzufügen
- Konsistentes Branding beibehalten
- Admin-Code in einem Must-use-Plugin unter Versionskontrolle halten
- Den Login mit 2FA und Limits auf dem Server absichern
- Langsame Dashboards an der Ursache beheben: Widgets, Objekt-Cache, Zeilen pro Seite
- Barrierefreiheit berücksichtigen
- Für Multisite planen, falls erforderlich
Aktualisiert: 16. Oktober 2026, geprüft mit WordPress 7.1.3
Wer das Dashboard einmal verstanden hat, sieht schnell, welche Menüpunkte im eigenen Projekt nur Ballast sind. Wenn der Admin-Bereich auf Ihr Team zugeschnitten werden soll, hilft unsere WordPress-Entwicklung für Redaktionen.






