You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
WordPress needs parsers. Not just any parsers, but parsers that are streaming, re-entrant, fast, standard compliant, and tested using a large body of possible inputs. A seemingly simple task such as moving a post to another website requires rewriting the URLs in that post, downloading the assets, and handling network failures. More complex tasks, such as importing a WXR file or transferring an entire site, are even more demanding.
WordPress also needs importers. Not just any importers, but importers that can handle large quantities of data from multitude of data formats, are extensible, and can proceed even when they encounter an error in the middle of the process. The WP_Stream_Importer class explored in this project is designed to fulfill these goals – see specific PRs below.
Finally, WordPress needs user and developer tools to use these importers. Not just any tools, but tools that work on the web, in CLI, in the Playground, guide the user with useful progress updates, and provide useful recovery paths when the inevitable errors occur. The work tracked here focuses on a wp-admin page, but the PHP software components are designed for easy reuse outside of wp-admin.
PHP dependency management – should we ship all the PHP classes in this repo? Or publish independent plugins for others to start adapting in their work – but with no BC guarantees?
The ideas below are the next phases of the project. They stretch far beyond the medium-term importers work tracked in this issue and only live here to paint the big picture.
Consider shipping .sql files with the export to potentially enable importing the resulting .zip in a regular MySQL-based server environment
...anything else actually?
"Duplicate Playground" feature
Iteration 1: Pipe the ZIP export to ZIP import
Iteration 2: Mount /wordpress-new in the duplicated Playground instance, run the PHP export/import code to migrate the site from /wordpress there
Iteration 3: Keep track of progress, make it resumable regardless of when the process is interrupted. This would enable exporting really big sites
Direct WordPress <-> WordPress transfer
Conceptually, this is like running Duplicate Playground over the internet
Important to keep track of progress and resources versions using a vector clock
Export / Import UI with scope (users? posts? etc.), error info (image.jpg couldn't be fetched after 3 retries), and error resolution mechanism (specify a different url? upload that image? retry 4th time?)
Live WordPress <-> WordPress data sync
Run the WordPress <-> WordPress transfer in a continuous way.
This is not about collaborative editing in the block editor, although there is likely an overlap around data synchronization.
Import one post at a time, not "all static assets" and then "all posts". Identify each post's dependency graph and frontload that post's dependent data first.
Resume .partial assets download upon import pause and resume.
Next Gen importers
This issue tracks the work related to Data Liberation Phase 2: Importing and Exporting Structured Data, that is:
WordPress needs parsers. Not just any parsers, but parsers that are streaming, re-entrant, fast, standard compliant, and tested using a large body of possible inputs. A seemingly simple task such as moving a post to another website requires rewriting the URLs in that post, downloading the assets, and handling network failures. More complex tasks, such as importing a WXR file or transferring an entire site, are even more demanding.
WordPress also needs importers. Not just any importers, but importers that can handle large quantities of data from multitude of data formats, are extensible, and can proceed even when they encounter an error in the middle of the process. The
WP_Stream_Importerclass explored in this project is designed to fulfill these goals – see specific PRs below.Finally, WordPress needs user and developer tools to use these importers. Not just any tools, but tools that work on the web, in CLI, in the Playground, guide the user with useful progress updates, and provide useful recovery paths when the inevitable errors occur. The work tracked here focuses on a
wp-adminpage, but the PHP software components are designed for easy reuse outside ofwp-admin.Tracking – ongoing Issues and PRs
Parsing
Exporting
Importing
Data formats
Reliability
UI
Other
Related resources
Next phases: Future Data Liberation roadmap
Note
The ideas below are the next phases of the project. They stretch far beyond the medium-term importers work tracked in this issue and only live here to paint the big picture.
.sqlfiles with the export to potentially enable importing the resulting.zipin a regular MySQL-based server environment/wordpress-newin the duplicated Playground instance, run the PHP export/import code to migrate the site from/wordpressthere.partialassets download upon import pause and resume.