Hi all,
I think we would all like to see more WordPress sites move to Drupal. This is the main module to do that! Additionally the main README.md is updated as some core bugs got resolved.
Mar 2026 status: Post alpha8; To shorten up the time to beta finally. I think also, we can release another alpha when major problems such as the major text formats problem is put in.
Ideally:
- inline images #3302411: Caption text and alignment are not imported for images
- much improved logging, ( #3516531: Add body field picker w default to wizard & processing ) completed that system
- cleaning up a number of fatal errors in import processes depending on formats, ( #3516531: Add body field picker w default to wizard & processing and some of this is already in, ( #2849663: Exceptions + error catching; does not catch missing file uri, or other duplicate migration plugins gracefully )
- introduce validation of the configuration object ( #3579149: Create validator classes MigrationConfigurationValidator + ValidationResult) ,
- major text formats / full html problem i think is OK now ( #3535554: HTML tags in body text is shown as plain text )
- rewrite the migration generator so it is less of a mess ( #3489412: Refactor / split up Wordpress generator (service, factory and validators) )
- add some reasonable tests in CI ( #3131928: Add + Improve Gitlab CI testing )
- catch datetime format with processing ( #3516516: DatabaseExceptionWrapper: Invalid datetime format )
- stop the bad default migration creation ( #3522658: Is it possible to avoid creating the Default migration after installation? )
- custom plugins can be attached at multiple points of the workflow (which would finalize the API). ( #3173973: Pluggable extension, support contrib + custom WordPress, Yoast SEO )
- After migrate_tools 6.0.9 we can now remote the entity generator. Also we are upping the PHP version and Drupal cut off to 10.5 because of migrate_tools 6.0.9 required for next release.
- Additional documentation added in /docs.
Nov 2024 status: Regarding alpha7 release, I believe we should drop Drupal 9 coverage and even Drupal 10.0.x, 10.1.x, on the later alpha8 release, which will make juggling all these APIs a lot easier for everyone. So alpha7 would be the last release with those versions. (My impression is 10.2.x is a reasonable cutoff for now, we don't seem to have 10.3.x+ APIs quite being imposed on us here.) (this is done as of March 2026 dev branch)
With Drupal CMS (Project Starshot) release coming fairly soon in 2025, and some pretty big issues in the WordPress community I think many of us see this is a great time to bring portability to people's websites and offer them a switch to Drupal.
Note: The #migrate channel on Drupal slack is the most appropriate public 'home' for discussion re this module Also, for contributors and doc writers, posting on plan here helps. Particularly re version releases and if we should fundamentally rewrite other parts, and key issues, is great to post here.
Here are the big issues currently on the queue:
Major issues
- #3435726: Drupal 11 compatibility fixes for wordpress_migrate. Main Drupal 11 is in, but logger statement should be converted to service.
- Pluggable plugins processing framework: #3173973: Pluggable extension, support contrib + custom WordPress, Yoast SEO
- Nice to have: new line to paragraph conversion: #2927510: Wordpress new line to paragraph conversion
- #3516531: Add body field picker w default to wizard & processing important for Drupal 11 / reported w Drupal CMS
Migrate configuration, XML parsing, source, process, destination, and import error messages
Also note some people have had more luck by cleaning the XML before attempting import (that is WordPress leaves fixable flaws in its exports)
- #3489664: Make default content author field autocomplete the username
- #2742275: Properly identify alt text for images
- #2742283: Validate configuration in WordPressMigrationGenerator::createMigrations
- #2742287: Extract and save blog metadata
- #2955482: Pingbacks are imported as comments - nodes with random names are created
- #2954890: Data too long for comment column "name" (comment_field_data.name)
- #3489714: Implement Gutenberg Block imports. Nice to have Gutenberg blocks natively imported eventually. Just at "ideas" right now.
- #3490070: Implement Custom Post Type (CPT) support
- #3490071: Implement Advanced Custom Fields (ACF / SCF) support
Fixed or closed: #2849663: Exceptions + error catching; does not catch missing file uri, or other duplicate migration plugins gracefully, #3123393: Users are duplicated (Integrity constraint violation) Duplicate entry, #2904545: Import permalink as URL paths, #2847156: review page: Migration_tags fatal error Call to a member function get() on boolean, #2764997: Call to a member function label() on boolean, #2742301: Preprocess the WordPress XML file, #2742269: Implement file/attachment migration for Drupal 8, #2839482: Wordpress Migration UI dies with a ConnectionNotDefinedException when import starts Docs: #3487624: Create a comprehensive documentation page for WordPress Developers new to Drupal Migrate deriver / plugin / config generator issue: #3390754: Undefined array key "migration" in findMigrationDependencies()
Attachments / files / stream wrappers
- Main media patch: #3173916: Import as media
- #2742291: Require private stream wrapper for uploaded blogs
Feature requests
- #2742293: Support importing directly from the WordPress admin interface
- #2742299: Support importing from the WordPress database
PHP file limits
#2742295: Support importing directly from the Drupal private file directory
Comments
Comments still seem glitchy? Or import seems to hang.
Closed: #2742311: Comment migration does not work
drush 12+
- #3489516: Implement Drush 13+ on wordpress_migrate
- Old: #2955644: Implement WordPress Migrate with Drush 9/10 . This would need some serious attention to get back to modern drush.
CI + Other
- #3131928: Add + Improve Gitlab CI testing CI testing. this is working with PHPunit already to assert that the plugin is installable and not causing fatal errors.
Anything else people would like to see? Patches would be most appreciated! CI testing patches welcome.
Test XML files for practice
- I have a repo here. https://gitlab.com/HongPong/wordpress-test-imports Also the new docs have info on generating random posts in modern WordPress which could be useful for sure. It is now updated with Yoast SEO entries, and Gutenberg.
Additional resources
migrate devel for debugging import processes
Debugging migrations
How to debug drupal migrations by dinarcon
Old note: Last night I tagged alpha1 with the hopes we can go farther with this thing. My understanding is that file attachments were held back a while because of core issues that are now resolved.
Comments
Comment #2
hongpong commentedComment #3
hongpong commentedComment #4
finn lewisHey HongPong,
How's this all going? I'm interested in easy automated migrations from Wordpress to Drupal, so I'll take it for a spin, but it seems like not much has happened in the last 2 years. Is that a good sign or a bad sign?
Cheers,
Finn
Comment #5
hongpong commentedHi Finn,
Thanks for checking in. The tricky thing about this module is that there is a very large possible variation in input from people's blog data. The most problematic issue is the one that seems to mangle tags: #2974024: Taxonomy fail: imports random strings as tags.
If you have the ability to thoroughly test patches and confirm that they work as expected that would be a huge boost for the project. On my end I'm finally come out of the daze of a very long project, so in any case I can help commit patches that are tested. Also the Migrate API has continued to evolve a bit and we need to really make sure that we haven't missed any relevant changes there.
With known limitations this module is functional, and can certainly be improved. That is how I would summarize the situation right now.
Comment #6
finn lewisThanks for the update, I'll see if I can find a real test case and let you know what I find.
Comment #7
hongpong commentedComment #9
hongpong commentedThe new alpha4 version is released and first stage of media importation works - also the wizard itself should be signifcantly more reliable and it is Drupal 9 compatible.
https://www.drupal.org/project/wordpress_migrate/releases/8.x-3.0-alpha4
I have set a repo with a number of XML files that can be used to test the imports and links to some other XML files in the readme.
https://gitlab.com/HongPong/wordpress-test-imports
Comment #10
hongpong commentedrevised this for Nov 2024
Comment #11
hongpong commentedComment #12
hongpong commentedComment #13
hongpong commentedComment #14
hongpong commentedComment #15
hongpong commentedComment #16
hongpong commentedI attached a bunch more XML files to the test repo. https://gitlab.com/HongPong/wordpress-test-imports
includes a11y, Japanese, Gutenberg, and some very light Yoast SEO content.
Comment #17
hongpong commentedupdated with latest issues
Comment #18
ressaThanks for you epic effort with the module @hongpong, it's very much appreciated.
I agree with your priorities about version support. It makes little sense to me, to use energy on maintaining a lot of backwards compatibility for this module, since in the vast majority of use cases, the user will start fresh, and not have to import WordPress site into an old Drupal version. Or if they are on an older version, then they should simply update to the latest release, to Drupal 10.3 or Drupal 11.0, and then proceed.
Only supporting Drupal 10.2, Drupal 10.3 and Drupal 11.0 would be perfectly fine, in my opinion. If a project needs support for older Drupal versions, they should of course feel free to sponsor you, to make it happen.
Anything that makes getting to the stable release eventually of version 3 should take top priority, as you write -- this module may get a lot more users soon :)
Comment #19
hongpong commentedComment #20
hongpong commentedthanks everyone for collaborating on this thing and particularly ressa for revamping the documentation entirely. it was a huge volunteer effort. if nobody has any errors to flag i should tag the alpha7 release today or tomorrow . I have a decent release note already drafted. Excellent work everyone and thank you!!!
Comment #21
ressaFantastic @hongpong, thanks!
Comment #22
hongpong commentedComment #23
hongpong commentedComment #24
hongpong commentedwordpress_migrate Alpha7 is released, thank you everyone! Release note: https://www.drupal.org/project/wordpress_migrate/releases/8.x-3.0-alpha7
Comment #25
ressaOutstanding, congratulations and thanks @hongpong!
Comment #26
hongpong commentedComment #27
hongpong commentedComment #28
hongpong commentedComment #29
hongpong commentedComment #30
hongpong commentedComment #31
hongpong commentedComment #32
hongpong commentedComment #33
ressaThank you for the 8.x-3.0-alpha9 release yesterday, getting closer to Beta :)
Comment #34
ressaFix end tags.
Comment #35
ressaI found a challenge, which I think many migrations will run into, that image captions and alignment are not imported, and raw mark-up is imported directly into the Body field, #3302411: Caption text and alignment are not imported for images.
I placed it at the top of the list, since many migrations needs this to work, but feel of course free to move it to another section :)