MksDdn Migrate Content
·
Reliable chunked migrations powered by custom .wpbkp archives.
MksDdn Migrate Content is a clean-room migration suite that packages your site into deterministic .wpbkp archives. Each bundle contains a manifest, checksum, database segments, media, selected files, and user decisions, so imports stay predictable.
Why MksDdn Migrate Content?
- Three export modes – Full Site (database + uploads/plugins/mu-plugins/themes), Selected Content (multi-select posts/pages/CPTs with or without referenced media), or Theme Export (individual themes as
.wpbkp). - Chunked pipeline – large archives stream through REST API endpoints with resume tokens, so multi‑GB transfers survive flaky networks.
- User merge control – compare archive vs current users and decide how to merge conflicts.
- Theme import mode – when a theme archive is detected, choose replace vs merge before applying changes.
- Integrity & safety –
.wpbkparchives ship with manifests and checksums; imports verify capabilities, nonces, and disk space before touching data. - Import preflight – unified import is a two-step flow: run preflight (read-only report), then start the real import from the report without uploading the file again (browser uploads are staged server-side between steps).
Feature Highlights
- Archive format with manifest, checksum, and payload folders (
content.json,media/,options/, filesystem slices). - Media scanner that collects featured images, galleries, attachments referenced inside blocks or shortcodes.
- File-system coverage for
wp-content/uploads,wp-content/plugins,wp-content/mu-plugins,wp-content/themeswith filters to skip VCS/system files. - Chunked upload/download JS client with live progress, auto-resume, and graceful fallback to direct transfer.
- Server file import — select backup files from
wp-content/uploads/mksddn-mc/imports/without browser uploads; delete unused server backups from the import UI. - Theme export and import with replace vs merge preview before applying changes.
- Export preflight — disk space and memory checks before full-site export starts.
- Drag-and-drop
.wpbkp/.jsonuploader with MIME validation and checksum guardrails (file-dropzone.js). - Centralized
PluginLogger— dedicated log file with rotation; disable viaMKSDDN_MC_DISABLE_LOGGINGinwp-config.php.
Architecture
The plugin follows SOLID principles and WordPress Coding Standards with a clean, modular architecture:
Service Container & Dependency Injection
- Centralized
ServiceContainermanages all dependencies - Service Providers (
CoreServiceProvider,AdminServiceProvider,ExportServiceProvider,ImportServiceProvider,ChunkServiceProvider) register services - All dependencies resolved through container, eliminating direct instantiation
- Full support for interface-based dependency injection
Request Handlers
ExportRequestHandler– handles export requestsImportRequestHandler– delegates to specialized import services (supports unified import viaUnifiedImportOrchestrator)UserMergeRequestHandler– processes user merge operationsThemePreviewRequestHandler– handles theme preview cancel operationsChunkRestController– REST API controller for chunked upload/download operations- All handlers implement corresponding interfaces for testability
Admin UI
- Top-level Migrate Content menu with Export and Import subpages
- Export tabs: Full Site, Selected Content, Theme Export (
AdminPageView,views/admin/*) - Unified import form with preflight report, user preview, and theme preview screens
- Admin assets:
file-dropzone.js,server-file-selector.js,chunk-transfer.js,admin-scripts.js,admin-styles.css
Export & Import Core
ExportHandler— selected content export (slug-based identifiers, media, taxonomies, ACF)ImportHandler— selected content import (parent-child ordering, slug lookup, Polylang/ACF)SelectionBuilder,ContentSelection— build export selections from admin inputFullContentExporter,FullContentImporter— full-site archive assembly and restoreFullDatabaseExporter,FullDatabaseImporter— streaming database export/importThemeExporter,ThemeImporter— theme archive export and filesystem applyOptionsExporter,OptionsImporter,OptionsHelper— WordPress options slicesAttachmentCollector,AttachmentRestorer,AttachmentCollection— media pipelineExportPreflight,ExportMemoryHelper— pre-export disk/memory checks and memory budgetingFilenameBuilder— deterministic archive filenames
Service Layer (Admin)
SelectedContentImportService— handles selected content importsFullSiteImportService— manages full site importsThemeImportService— handles theme archive importsUnifiedImportOrchestrator— orchestrates unified import with automatic type detection; step 1 is always preflight, step 2 runs the real import using a stored file referenceImportPreflightService— read-only analysis for unified import preflightPreflightReportStore— short-lived transient storage for preflight reports and follow-up import handles (staged browser uploads underwp-content/uploads/mksddn-mc/preflight/, or chunk/server identifiers)ImportTypeDetector— detects import type (full site, selected content, or theme) from archive fileImportFileValidator— validates uploaded filesImportPayloadPreparer— prepares import payloadsServerBackupScanner— scans, validates, and deletes backup files on the serverResponseHandler— manages redirects and status messagesNotificationService— handles user notificationsProgressService— tracks operation progressErrorHandler,PluginLogger— centralized error handling and file loggingUserDiffBuilder,UserMergeApplier,UserPreviewStore— user merge workflowThemePreviewStore(Themes\ThemePreviewStore) — stores pending theme import previews
Support & Maintenance
DeactivationCleanup— clears temporary upload state and service directories when the plugin is deactivatedPostImportMaintenance— cache/rewrite cleanup after full import and emergency purge if the database was partially updated; global flush plus targetedwp_cache_flush_group()when supported; filtermksddn_mc_post_import_object_cache_flush_groupsFullImportMaintenance— file-based runtime lock and early 503 gate while a full-site import is running (admin, CLI, cron exempt; REST blocked unless explicitly allowed)ImportLock— prevents concurrent import operationsPreflightStagingPath— validates staged preflight file pathsThemeArchivePathHelper— normalizes theme archive entry pathsDomainReplacer,SiteUrlGuard,FilesystemHelper,MimeTypeHelper
Archive Layer
Packer,Extractor—.wpbkparchive pack/unpackFullArchivePayload— memory-efficient JSON payload handlingContentCollector— filesystem content collection for exportsArchiveValidator,ValidationResult— manifest and checksum validation
Contracts (Interfaces)
All key components implement interfaces:
* ExporterInterface, ImporterInterface
* MediaCollectorInterface, ChunkJobRepositoryInterface
* UserPreviewStoreInterface, ThemePreviewStoreInterface, UserDiffBuilderInterface, UserMergeApplierInterface
* NotificationServiceInterface, ProgressServiceInterface
* ArchiveHandlerInterface, ValidatorInterface
* Request handler interfaces for all handlers
Error Handling
- Specialized exceptions:
ValidationException,FileOperationException,DatabaseOperationException,ImportException,ExportException - Centralized
ErrorHandlerfor consistent error processing - Proper logging and user-friendly error messages
- Validation classes:
ArchiveValidator,ImportDataValidator,ExportDataValidator,FileValidator
Performance
BatchLoaderfor optimized database queries (prevents N+1 problems)- Efficient media collection with batch processing (
AttachmentCollector,AttachmentRestorer) - Chunked transfer for large files via REST API (
ChunkRestController,ChunkJobRepository) - Memory-efficient streaming for large archives (
FullArchivePayload,ExportMemoryHelper) ContentCollectorfor filesystem content collection- Streaming
FullDatabaseExporterwith adaptive batch sizes
Security
- All admin operations check
current_user_can('manage_options') - Nonce verification for all forms and AJAX requests
- REST API endpoints protected with permission callbacks
- Input sanitization using WordPress sanitization functions
- Output escaping with
esc_html(),esc_attr(),esc_url() - File upload validation with MIME type checking
- Path traversal protection for server file access and deletion (
ServerBackupScanner) - Path traversal protection for archive extraction (full site + theme import)
SiteUrlGuardprevents accidental site URL changes during importImportLockprevents concurrent import operationsDomainReplacersafely handles URL replacement during migrations