' . esc_html($subtitle) . '
'; } echo wp_kses( '← ' . esc_html__('Back to guided setup', 'aiwend') . ' ' . esc_html__('You came here from the guided setup. Nothing you save here is lost when you go back.', 'aiwend') . '
'; } } public static function close(): void { echo '%3$s', esc_attr($type), $type === 'error' ? 'alert' : 'status', esc_html($text)); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- read-only navigation or filter parameter; no state is changed $next = isset($_GET['aiwend_next']) ? esc_url_raw(Input::get('aiwend_next')) : ''; // Phase 89 (P88-3): the link text comes from this fixed map keyed by the notice code, never from the URL, and the // target must match the kind of page that notice leads to; a crafted link cannot show its own words inside a genuine notice. $follow = [ 'page_created' => [__('Open the draft page', 'aiwend'), admin_url('post.php?post=')], 'queued' => [__('Next: attach it to an assistant', 'aiwend'), admin_url('admin.php?page=aiwend-bots')], ]; if ($next !== '' && isset($follow[$code]) && str_starts_with($next, $follow[$code][1])) { echo ' ' . esc_html($follow[$code][0]) . ''; } echo '