Skip to content

Export unavailable when Ultimate Multisite is not fully set up — blocks migration use case #1007

@superdav42

Description

@superdav42

Bug

The Site Exporter is completely unavailable when Ultimate Multisite is not fully set up (setup wizard not completed). In inc/class-wp-ultimo.php:182-193:

if (WP_Ultimo\Requirements::met() === false || WP_Ultimo\Requirements::run_setup() === false || ...) {
    // Only loads Setup Wizard pages
    return;  // <-- exits before loading Site Exporter at line 584
}

The Site_Exporter::get_instance() call is at line 584, well after the early return. This means:

  1. The Sites > Export & Import admin page is not registered
  2. The export/import row actions on the WordPress Sites page are not added
  3. The wu_exporter_export() / wu_exporter_import() functions exist but the action handlers are never hooked
  4. CLI commands are not available

Why This Matters

The export feature is specifically designed to work on the WordPress default Sites page (not the Ultimate Multisite Sites page) via setup_wordpress_sites_integration(). This is meant to enable migration FROM other solutions. But if Ultimate Multisite setup hasn't been completed, the integration is never loaded — exactly when migration is most needed.

Expected

Export should work even when:

  • Ultimate Multisite is installed but not fully set up
  • The user is on a plain WordPress Multisite and wants to export sites before/during migration
  • Running on a single site install (for migration to multisite)

Suggested Fix

Move Site_Exporter::get_instance() (or at least the setup_wordpress_sites_integration() portion) to BEFORE the requirements/setup check in init(). The WordPress Sites page integration has no dependency on Ultimate Multisite being fully set up — it only uses WordPress core functions (get_blog_details, wp_insert_site, wp_upload_dir, etc.).

Files to modify

  • EDIT: inc/class-wp-ultimo.php:165-193 — move Site_Exporter initialization before the setup gate, or extract the WordPress integration into a separate early-load path
  • EDIT: inc/site-exporter/class-site-exporter.php:40-61 — possibly split init into init_core() (WordPress integration, no deps) and init_full() (Ultimate Multisite integration)

Severity

High — defeats the purpose of having WordPress Sites page integration for migration scenarios.


aidevops.sh v3.13.11 plugin for OpenCode v1.3.17 with claude-opus-4-6 spent 6m and 13,148 tokens on this as a headless worker.

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingenhancementNew feature or requestorigin:interactiveCreated by interactive user sessionstatus:in-progressWorker actively running

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions