diff --git a/inc/admin-pages/class-multisite-setup-admin-page.php b/inc/admin-pages/class-multisite-setup-admin-page.php index 4ee190d9..6ddb81ec 100644 --- a/inc/admin-pages/class-multisite-setup-admin-page.php +++ b/inc/admin-pages/class-multisite-setup-admin-page.php @@ -340,6 +340,11 @@ public function section_complete(): void { $result = wu_request('result', ''); // phpcs:ignore WordPress.Security.NonceVerification.Recommended if ('success' === $result || is_multisite()) : + /* + * Build the network-admin URL deterministically. + * + */ + $continue_url = site_url('wp-admin/network/admin.php?page=wp-ultimo-setup'); ?>
@@ -358,7 +363,7 @@ public function section_complete(): void {
- +
diff --git a/tests/WP_Ultimo/Admin_Pages/Multisite_Setup_Admin_Page_Test.php b/tests/WP_Ultimo/Admin_Pages/Multisite_Setup_Admin_Page_Test.php index 73e9b7f4..42d42280 100644 --- a/tests/WP_Ultimo/Admin_Pages/Multisite_Setup_Admin_Page_Test.php +++ b/tests/WP_Ultimo/Admin_Pages/Multisite_Setup_Admin_Page_Test.php @@ -678,6 +678,39 @@ public function test_section_complete_button_uses_wp_button_classes_not_missing_ $this->assertStringNotContainsString('wu-bg-blue-700', $output, 'wu-bg-blue-700 is not in framework.css and must not be used'); } + /** + * section_complete() Continue button must point at the /network/ admin URL. + * + * Regression: previously the button used wu_network_admin_url() which falls back + * to admin_url() when is_multisite() returns false (e.g. when OPcache is still + * serving a stale wp-config.php after the install step writes the MULTISITE + * constant). That caused the success-page button to send users to + * /wp-admin/admin.php?page=wp-ultimo-setup (single-site) instead of + * /wp-admin/network/admin.php?page=wp-ultimo-setup. The fix builds the URL + * deterministically with site_url(), so the path must always contain /network/. + */ + public function test_section_complete_continue_button_points_at_network_admin(): void { + + $_GET['result'] = 'success'; + + ob_start(); + $this->page->section_complete(); + $output = ob_get_clean(); + + unset($_GET['result']); + + $this->assertMatchesRegularExpression( + '#href="[^"]*/wp-admin/network/admin\.php\?page=wp-ultimo-setup[^"]*"#', + $output, + 'Continue button must link to the network admin URL, not the single-site admin URL' + ); + $this->assertDoesNotMatchRegularExpression( + '#href="[^"]*/wp-admin/admin\.php\?page=wp-ultimo-setup[^"]*"#', + $output, + 'Continue button must NOT link to the single-site admin URL' + ); + } + // ------------------------------------------------------------------------- // display_manual_instructions() — via reflection // -------------------------------------------------------------------------