Wir erstellen ein eigenes Custom Login Redirect Plugin

Wie du ein WordPress Login Redirect Plugin erstellst – Eine Schritt-für-Schritt-Anleitung

Einleitung

Ein eigenes WordPress-Plugin zu entwickeln, ist ein hervorragender Weg, um deine Website individuell anzupassen und gleichzeitig wertvolle Kenntnisse über WordPress-Entwicklung zu sammeln. In diesem Beitrag zeigen wir dir, wie du ein Login Redirect Plugin erstellst, das Benutzer nach dem Einloggen basierend auf ihrer Rolle zu bestimmten Seiten weiterleitet.

Mit dieser Anleitung wirst du:

  • Ein funktionsfähiges WordPress-Plugin schreiben
  • Benutzer basierend auf ihrer Rolle umleiten
  • Ein Admin-Menü zur Verwaltung der Weiterleitungen erstellen

Lass uns starten!

1. Die Plugin-Basis erstellen

Jedes WordPress-Plugin beginnt mit einer Datei im wp-content/plugins/-Verzeichnis. Erstelle dort einen neuen Ordner custom-login-redirect und eine Datei custom-login-redirect.php.

Öffne die Datei und füge diesen Code hinzu:

<?php
/**
 * Plugin Name: Custom Login Redirect
 * Plugin URI: https://example.com
 * Description: Leitet Benutzer nach dem Login je nach Rolle auf eine bestimmte Seite weiter.
 * Version: 1.0
 * Author: Dein Name
 * Author URI: https://example.com
 */

if (!defined('ABSPATH')) {
    exit; // Sicherheit: Direktzugriff verhindern
}

2. Benutzer nach dem Login umleiten

Nun implementieren wir die Kernfunktion des Plugins: Benutzer basierend auf ihrer Rolle weiterzuleiten. Dazu nutzen wir den wp_login Hook.

Füge folgenden Code unter die Plugin-Header hinzu:

function clr_redirect_user_after_login($user_login, $user) {
    // Standard-Weiterleitung
    $redirect_url = home_url();
    
    // Rolle des Benutzers abrufen
    if (in_array('administrator', $user->roles)) {
        $redirect_url = admin_url();
    } elseif (in_array('editor', $user->roles)) {
        $redirect_url = site_url('/editor-dashboard');
    } elseif (in_array('subscriber', $user->roles)) {
        $redirect_url = site_url('/willkommen');
    }
    
    wp_safe_redirect($redirect_url);
    exit;
}
add_action('wp_login', 'clr_redirect_user_after_login', 10, 2);

Erklärung des Codes:

  • Die Funktion überprüft die Rolle des Benutzers nach dem Login.
  • Basierend auf der Rolle wird eine spezifische Weiterleitungs-URL gesetzt.
  • wp_safe_redirect($redirect_url) leitet den Benutzer zur gewünschten Seite um.

3. Admin-Seite für benutzerdefinierte Weiterleitungen

Jetzt fügen wir eine Einstellungsseite im WordPress-Admin-Bereich hinzu, mit der Administratoren die Weiterleitungsziele ändern können.

Füge diesen Code in deine Plugin-Datei ein:

function clr_add_admin_menu() {
    add_options_page('Login Redirect Einstellungen', 'Login Redirect', 'manage_options', 'clr-settings', 'clr_settings_page');
}
add_action('admin_menu', 'clr_add_admin_menu');

function clr_settings_page() {
    ?>
    <div class="wrap">
        <h1>Login Redirect Einstellungen</h1>
        <form method="post" action="options.php">
            <?php
            settings_fields('clr_settings_group');
            do_settings_sections('clr-settings');
            submit_button();
            ?>
        </form>
    </div>
    <?php
}

Erklärung des Codes:

  • Die Funktion clr_add_admin_menu() fügt ein neues Menü in den Einstellungen hinzu.
  • Die Funktion clr_settings_page() erzeugt die HTML-Struktur der Einstellungsseite.

4. Weiterleitungsziele speicherbar machen

Jetzt implementieren wir die Speicherfunktion, sodass die Weiterleitungsziele in der WordPress-Datenbank gespeichert werden können.

Füge diesen Code hinzu:

function clr_register_settings() {
    register_setting('clr_settings_group', 'clr_redirect_admin');
    register_setting('clr_settings_group', 'clr_redirect_editor');
    register_setting('clr_settings_group', 'clr_redirect_subscriber');
}
add_action('admin_init', 'clr_register_settings');

Nun aktualisieren wir die clr_settings_page()-Funktion, damit die gespeicherten Werte angezeigt werden:

function clr_settings_page() {
    ?>
    <div class="wrap">
        <h1>Login Redirect Einstellungen</h1>
        <form method="post" action="options.php">
            <?php
            settings_fields('clr_settings_group');
            do_settings_sections('clr-settings');
            ?>
            <label>Administrator Weiterleitung:</label>
            <input type="text" name="clr_redirect_admin" value="<?php echo esc_attr(get_option('clr_redirect_admin', admin_url())); ?>">
            <br><br>
            <label>Editor Weiterleitung:</label>
            <input type="text" name="clr_redirect_editor" value="<?php echo esc_attr(get_option('clr_redirect_editor', site_url('/editor-dashboard'))); ?>">
            <br><br>
            <label>Subscriber Weiterleitung:</label>
            <input type="text" name="clr_redirect_subscriber" value="<?php echo esc_attr(get_option('clr_redirect_subscriber', site_url('/willkommen'))); ?>">
            <br><br>
            <?php submit_button(); ?>
        </form>
    </div>
    <?php
}

5. Plugin-Einstellungen in die Weiterleitungslogik integrieren

Jetzt ändern wir die clr_redirect_user_after_login()-Funktion so, dass sie die in den Einstellungen gespeicherten Werte verwendet:

function clr_redirect_user_after_login($user_login, $user) {
    $redirect_url = home_url();

    if (in_array('administrator', $user->roles)) {
        $redirect_url = get_option('clr_redirect_admin', admin_url());
    } elseif (in_array('editor', $user->roles)) {
        $redirect_url = get_option('clr_redirect_editor', site_url('/editor-dashboard'));
    } elseif (in_array('subscriber', $user->roles)) {
        $redirect_url = get_option('clr_redirect_subscriber', site_url('/willkommen'));
    }

    wp_safe_redirect($redirect_url);
    exit;
}

Fazit

Wir haben ein vollständiges Login Redirect Plugin entwickelt, das Benutzer basierend auf ihrer Rolle weiterleitet. Zudem haben wir eine Admin-Oberfläche erstellt, um die Weiterleitungen dynamisch zu ändern.

Hier ist der komplette Code, den du im wp-content/plugins/-Verzeichnis in dem neuen Ordner custom-login-redirect in die neu dafür erstellte Datei custom-login-redirect.php kopieren kannst.

<?php
/**
 * Plugin Name: Custom Login Redirect
 * Plugin URI: https://example.com
 * Description: Leitet Benutzer nach dem Login je nach Rolle auf eine bestimmte Seite weiter.
 * Version: 1.0
 * Author: Dein Name
 * Author URI: https://example.com
 */

if (!defined('ABSPATH')) {
    exit; // Sicherheit: Direktzugriff verhindern
}

function clr_redirect_user_after_login($user_login, $user) {
    $redirect_url = home_url();

    if (in_array('administrator', $user->roles)) {
        $redirect_url = get_option('clr_redirect_admin', admin_url());
    } elseif (in_array('editor', $user->roles)) {
        $redirect_url = get_option('clr_redirect_editor', site_url('/editor-dashboard'));
    } elseif (in_array('subscriber', $user->roles)) {
        $redirect_url = get_option('clr_redirect_subscriber', site_url('/willkommen'));
    }

    wp_safe_redirect($redirect_url);
    exit;
}

add_action('wp_login', 'clr_redirect_user_after_login', 10, 2);

function clr_add_admin_menu() {
    add_options_page('Login Redirect Einstellungen', 'Login Redirect', 'manage_options', 'clr-settings', 'clr_settings_page');
}
add_action('admin_menu', 'clr_add_admin_menu');

function clr_register_settings() {
    register_setting('clr_settings_group', 'clr_redirect_admin');
    register_setting('clr_settings_group', 'clr_redirect_editor');
    register_setting('clr_settings_group', 'clr_redirect_subscriber');
}
add_action('admin_init', 'clr_register_settings');

function clr_settings_page() {
    ?>
    <div class="wrap">
        <h1>Login Redirect Einstellungen</h1>
        <form method="post" action="options.php">
            <?php
            settings_fields('clr_settings_group');
            do_settings_sections('clr-settings');
            ?>
            <label>Administrator Weiterleitung:</label>
            <input type="text" name="clr_redirect_admin" value="<?php echo esc_attr(get_option('clr_redirect_admin', admin_url())); ?>">
            <br><br>
            <label>Editor Weiterleitung:</label>
            <input type="text" name="clr_redirect_editor" value="<?php echo esc_attr(get_option('clr_redirect_editor', site_url('/editor-dashboard'))); ?>">
            <br><br>
            <label>Subscriber Weiterleitung:</label>
            <input type="text" name="clr_redirect_subscriber" value="<?php echo esc_attr(get_option('clr_redirect_subscriber', site_url('/willkommen'))); ?>">
            <br><br>
            <?php submit_button(); ?>
        </form>
    </div>
    <?php
}

?>

Similar Posts