roles as $role) { $role_redirect_url = get_option("acemedia_login_block_redirect_{$role}"); if (!empty($role_redirect_url)) { return wp_validate_redirect($role_redirect_url, $redirect_url); } } return $redirect_url; } public function logout_redirect($redirect_url, $requested_redirect_url, $user) { if (!$requested_redirect_url && get_option('acemedia_login_block_custom_page', 0)) { return home_url(); } return $redirect_url; } /** * Handle the logout process */ public function handle_logout() { if (($GLOBALS['pagenow'] ?? '') === 'wp-login.php' && isset($_GET['action']) && $_GET['action'] === 'logout') { // Verify the nonce if (isset($_GET['_wpnonce']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_GET['_wpnonce'])), 'log-out')) { if (\AceLoginBlock\Auth\Two_Factor::has_trusted_cookie() && empty($_POST['acemedia_logout_choice'])) { $this->render_logout_trust_prompt(); exit; } $choice = isset($_POST['acemedia_logout_choice']) ? sanitize_text_field(wp_unslash($_POST['acemedia_logout_choice'])) : 'keep'; if ($choice === 'forget') { \AceLoginBlock\Auth\Two_Factor::forget_trusted_device(get_current_user_id()); } // Core performs logout and applies its requested redirect/filter. return; } } } private function render_logout_trust_prompt() { $args = ['action' => 'logout', '_wpnonce' => sanitize_text_field(wp_unslash($_GET['_wpnonce'] ?? ''))]; if (!empty($_GET['redirect_to']) && is_string($_GET['redirect_to'])) { $args['redirect_to'] = wp_validate_redirect(esc_url_raw(wp_unslash($_GET['redirect_to'])), home_url()); } $action_url = add_query_arg($args, wp_login_url()); if (function_exists('login_header')) { login_header(__('Log out', 'acemedia-login-block')); } else { echo '
'; } ?>