/** * 1. Theme-Supports */ add_theme_support('avia_conditionals_for_mega_menu'); add_theme_support('avia_template_builder_custom_css'); /** * Hilfsfunktion: sichere Logout-URL mit Nonce bauen */ function ml_build_logout_url($role = '') { $args = ['action' => 'custom_logout']; if ($role !== '') { $args['role'] = $role; } $url = add_query_arg($args, site_url('wp-login.php')); return wp_nonce_url($url, 'ml_logout', 'ml_nonce'); } /** * 2. Shortcode für Login-Formular */ function mein_login_form_shortcode() { error_log('Shortcode aufgerufen'); if (is_user_logged_in()) { $user = wp_get_current_user(); $roles = (array)$user->roles; $role = ''; if (in_array('administrator', $roles, true)) { $role = 'admin'; } elseif (in_array('customer', $roles, true)) { $role = 'customer'; } elseif (in_array('s2member_level1', $roles, true)) { $role = 's2member'; } $logout_url = ml_build_logout_url($role); error_log('Shortcode Logout-Link: ' . $logout_url); return '
' . esc_html__('Du bist bereits angemeldet.', 'avia_framework') . ' ' . esc_html__('Abmelden', 'avia_framework') . '
'; } ob_start(); $locale = get_locale(); $labels = [ 'label_username' => __('Benutzername oder E-Mail-Adresse', 'avia_framework'), 'label_password' => __('Passwort', 'avia_framework'), 'label_remember' => __('Angemeldet bleiben', 'avia_framework'), 'label_log_in' => __('Anmelden', 'avia_framework'), ]; if (strpos($locale, 'fr') === 0) { $labels = [ 'label_username' => 'Nom d’utilisateur ou e-mail', 'label_password' => 'Mot de passe', 'label_remember' => 'Rester connecté', 'label_log_in' => 'Connexion', ]; } elseif (strpos($locale, 'en') === 0) { $labels = [ 'label_username' => 'Username or Email', 'label_password' => 'Password', 'label_remember' => 'Remember Me', 'label_log_in' => 'Log In', ]; } wp_login_form([ 'echo' => true, 'redirect' => wp_get_referer() ? wp_get_referer() : site_url(), 'id_username' => 'user_login', 'id_password' => 'user_pass', 'id_remember' => 'rememberme', 'id_submit' => 'wp-submit', 'remember' => true, 'label_username' => $labels['label_username'], 'label_password' => $labels['label_password'], 'label_remember' => $labels['label_remember'], 'label_log_in' => $labels['label_log_in'], ]); return ob_get_clean(); } add_shortcode('mein_login_formular', 'mein_login_form_shortcode'); /** * 3. Menü-Logout-Link ersetzen */ add_filter('wp_nav_menu_objects', function($items, $args) { error_log('Nav-Menü Filter aufgerufen'); if (!$items) return $items; foreach ($items as $item) { if ($item->url === '#logout') { $user = wp_get_current_user(); $roles = (array)$user->roles; $role = ''; if (in_array('administrator', $roles, true)) { $role = 'admin'; } elseif (in_array('customer', $roles, true)) { $role = 'customer'; } elseif (in_array('s2member_level1', $roles, true)) { $role = 's2member'; } $item->url = ml_build_logout_url($role); error_log('Nav Logout-Link: ' . $item->url); } } return $items; }, 10, 2); /** * 4. Mobile Menü-Logout-Link */ add_filter('avia_mobile_menu', function($menu) { error_log('Mobile Menü Filter aufgerufen'); if (is_user_logged_in()) { $user = wp_get_current_user(); $roles = (array)$user->roles; $role = ''; if (in_array('administrator', $roles, true)) { $role = 'admin'; } elseif (in_array('customer', $roles, true)) { $role = 'customer'; } elseif (in_array('s2member_level1', $roles, true)) { $role = 's2member'; } $logout_url = ml_build_logout_url($role); $menu .= '