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
// -------------------------------------------------------------------------