Wiki

für WordPress-Entwickler

Anleitungen, Snippets und mehr…

WP-Dashboard

Um ein benutzerdefiniertes WP-Dashboard zu erstellen und den Zugriff auf andere Bereiche des Admin-Bereichs zu beschränken, können folgende Schritte ausgeführt werden. Dies ist besonders nützlich, wenn den Nutzern eine vereinfachte Oberfläche angeboten werden soll oder spezielle Benutzerrollen Einschränkungen benötigen.

1. Erstellen eines benutzerdefinierten Dashboard-Widgets

Zuerst werden wir ein benutzerdefiniertes Dashboard-Widget erstellen, das spezifische Informationen oder Funktionen für die Benutzer anbietet.

function my_custom_dashboard_widget() {
	echo "<img src='http://www.dev-becker.de/wp-content/uploads/2023/03/logo-1.svg' style='float: right;' />";
	echo "<h1>Willkommen auf Ihrem Dashboard!</h1><p>Hier finden Sie grundlegende Info's zu Ihrer WP-Installation.</p>";

	global $wpdb;
	$server_typ = $_SERVER['SERVER_SOFTWARE'];
	$db_version = $wpdb->db_version();
	$db_typ = $wpdb->db_version();  // Abruf der Datenbankversion
	$datenbank_typ = $wpdb->use_mysqli ? 'MySQLi' : 'MySQL';
	$site_url = site_url();
	$wp_version = get_bloginfo('version');
	$anzahl_benutzer = count_users();
	$anzahl_seiten = wp_count_posts('page')->publish;

	// Speicherbelegung berechnen
	$total_space = disk_total_space(".")/ 1024 / 1024 / 1024; // Gesamtspeicherplatz
	$free_space = disk_free_space(".")/ 1024 / 1024 / 1024; // Freier Speicherplatz
	$used_space = ($total_space - $free_space); // Belegter Speicherplatz berechnen

	$total_space_formatted = number_format($total_space, 2, '.', '') . ' GB';
	$free_space_formatted = number_format($free_space, 2, '.', '') . ' GB';
	$used_space_formatted = number_format($used_space, 2, '.', '') . ' GB';

	echo "<h2>$site_url</h2>";
	echo "<p>Installierte WordPress-Version: $wp_version</p>";
	echo "<p>Server-Typ: $server_typ</p>";
	echo "<p>Datenbank: $datenbank_typ Version: $db_version</p>";
	echo "<p>Gesamter Speicherplatz: $total_space_formatted</p>";
	echo "<p>Belegter Speicherplatz: $used_space_formatted</p>";
	echo "<p>Freier Speicherplatz: $free_space_formatted</p>";

	echo "<h2>Ihr Betreuerteam:</h2>";
	echo "<a href='https://www.dev-becker.de' target='_blank' style='display: inline-block;'><img src='https://www.dev-becker.de' style='max-height: 48px;' /></a>";

	echo "<h2>Statistik:</h2>";
	echo "<p>Anzahl der registrierten Benutzer: {$anzahl_benutzer['total_users']}</p>";
	echo "<p>Anzahl der aktiven Seiten: $anzahl_seiten</p>";
}

function add_custom_dashboard_widget() {
	wp_add_dashboard_widget('custom_dashboard_widget', 'HBDev Dashboard', 'my_custom_dashboard_widget');
}
add_action('wp_dashboard_setup', 'add_custom_dashboard_widget');

2. Entfernen aller anderen Dashboard-Widgets

Um das Dashboard weiter zu vereinfachen, könne alle anderen vorinstallierten Widgets entfernt werden.

function remove_other_dashboard_widgets() {
    global $wp_meta_boxes;
    $dashboard = 'dashboard';
    $normal = 'normal';
    $side = 'side';
    $advanced = 'advanced';

    // Widgets, die nicht entfernt werden sollen
    $keep_widget_ids = ['custom_dashboard_widget']; // ID Ihres benutzerdefinierten Widgets

    foreach ($wp_meta_boxes[$dashboard][$normal]['core'] as $id => $widget) {
        if (!in_array($id, $keep_widget_ids)) {
            unset($wp_meta_boxes[$dashboard][$normal]['core'][$id]);
        }
    }

    foreach ($wp_meta_boxes[$dashboard][$side]['core'] as $id => $widget) {
        if (!in_array($id, $keep_widget_ids)) {
            unset($wp_meta_boxes[$dashboard][$side]['core'][$id]);
        }
    }

    foreach ($wp_meta_boxes[$dashboard][$advanced]['core'] as $id => $widget) {
        if (!in_array($id, $keep_widget_ids)) {
            unset($wp_meta_boxes[$dashboard][$advanced]['core'][$id]);
        }
    }
}
add_action('wp_dashboard_setup', 'remove_other_dashboard_widgets', 999);

3. Beschränken des Zugriffs auf andere Admin-Seiten

Hiermit wird der Zugriff auf andere Seiten im WordPress-Adminbereich eingeschränkt, indem die Benutzer umgeleitet werden, wenn sie versuchen, auf diese Seiten zuzugreifen.

function restrict_admin_pages() {
    $user = wp_get_current_user();
    if ( isset( $user->roles ) && is_array( $user->roles ) ) {
        // Überprüfen Sie, ob der Benutzer nicht Administrator ist
        if ( !in_array( 'administrator', $user->roles ) ) {
            global $pagenow;
            $allowed_pages = ['admin-ajax.php', 'admin-post.php', 'index.php']; // Erlauben Sie Zugriff auf das Dashboard und Ajax-Handler

            if ( !in_array( $pagenow, $allowed_pages ) ) {
                wp_redirect( admin_url('index.php') );  // Umleitung zum Dashboard
                exit;
            }
        }
    }
}
add_action('admin_init', 'restrict_admin_pages');

4. Anpassen der Admin-Menüs

Hier werden spezifische Menüpunkte entfernt, um sicherzustellen, dass Benutzer nur auf erlaubte Bereiche zugreifen können.

function remove_menus(){
    if ( !current_user_can('administrator') ) {
        remove_menu_page('tools.php');   // Tools
        remove_menu_page('options-general.php');  // Einstellungen
        // Fügen Sie zusätzliche Menüseiten hinzu, die Sie entfernen möchten
    }
}
add_action('admin_menu', 'remove_menus');function remove_menus(){
    if ( !current_user_can('administrator') ) {
        remove_menu_page('tools.php');   // Tools
        remove_menu_page('options-general.php');  // Einstellungen
        // Fügen Sie zusätzliche Menüseiten hinzu, die Sie entfernen möchten
    }
}
add_action('admin_menu', 'remove_menus');

Durch die Kombination dieser Maßnahmen kann man ein stark angepasstes und eingeschränktes WordPress-Dashboard erstellen, das auf die spezifischen Bedürfnisse und Rollen der Benutzer zugeschnitten ist. Es ist wichtig, das die Benutzerrollen und Berechtigungen genau geprüft werden um sicherzustellen, dass keine unerwünschten Zugriffspunkte offen bleiben.