{"id":326968,"date":"2026-06-26T10:47:53","date_gmt":"2026-06-26T10:47:53","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/content-bridge-migration\/"},"modified":"2026-06-26T10:47:14","modified_gmt":"2026-06-26T10:47:14","slug":"autofetch-content-migration","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/autofetch-content-migration\/","author":23517111,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.0","stable_tag":"1.4.0","tested":"7.0","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"AutoFetch Content Migration","header_author":"EsLaM Hamed","header_description":"A plugin to migrate articles, images, and taxonomy from one WordPress site to another via REST API.","assets_banners_color":"3f4a52","last_updated":"2026-06-26 10:47:14","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/eslamdev.com","header_plugin_uri":"https:\/\/eslamdev.com\/plugin\/autofetch-content-migration\/","header_author_uri":"https:\/\/eslamdev.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":19,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.4.0":{"tag":"1.4.0","author":"linguaflow","date":"2026-06-26 10:47:14"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3587134,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3587134,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3587134,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3587134,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.4.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The AutoFetch dashboard showing the connection settings card.","2":"Category filtering to select specific categories for import.","3":"Live migration console showing AJAX progress and activity logs.","4":"Migration Reports tab showing import history with source URLs."}},"plugin_section":[],"plugin_tags":[529,87,4155,23853],"plugin_category":[59],"plugin_contributors":[257885,268995],"plugin_business_model":[],"class_list":["post-326968","plugin","type-plugin","status-publish","hentry","plugin_tags-content","plugin_tags-import","plugin_tags-migration","plugin_tags-rest-api","plugin_category-utilities-and-tools","plugin_contributors-eh6142302","plugin_contributors-linguaflow","plugin_committers-linguaflow"],"banners":{"banner":"https:\/\/ps.w.org\/autofetch-content-migration\/assets\/banner-772x250.png?rev=3587134","banner_2x":"https:\/\/ps.w.org\/autofetch-content-migration\/assets\/banner-1544x500.png?rev=3587134","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/autofetch-content-migration\/assets\/icon-128x128.png?rev=3587134","icon_2x":"https:\/\/ps.w.org\/autofetch-content-migration\/assets\/icon-256x256.png?rev=3587134","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>AutoFetch Content Migration lets you connect a destination WordPress site to a remote source WordPress site's REST API to query, filter, and import any public post type (posts, pages, custom post types), media assets, categories, and tags \u2014 all handled incrementally over AJAX to avoid timeouts.<\/p>\n\n<p>Unlike traditional migration tools that require database dumps or XML exports, AutoFetch handles the process post-by-post without touching the source site's database directly.<\/p>\n\n<p><strong>Authentication<\/strong><\/p>\n\n<p>AutoFetch uses WordPress Application Passwords for secure, authenticated access to the source site. This allows importing published, draft, pending, and private posts with full content and metadata.<\/p>\n\n<p><strong>Security Features<\/strong><\/p>\n\n<ul>\n<li>SSRF Protection: Source URLs are validated against private and loopback address ranges.<\/li>\n<li>PHP Object Injection Mitigation: Deserialization of custom fields is handled with <code>allowed_classes<\/code> set to false.<\/li>\n<li>Server-Side Transients: Credentials are stored in server-side transients expiring in 1 hour.<\/li>\n<li>HTTPS Enforcement: Application Password connections require HTTPS.<\/li>\n<li>Per-Post Capability Checks: REST API meta exposure is gated by per-post edit capability.<\/li>\n<\/ul>\n\n<p><strong>Migration Features<\/strong><\/p>\n\n<ul>\n<li>Dynamic Post Type Support: Automatically detects all public post types on the source site.<\/li>\n<li>Deep Media Sideloading: Downloads images, registers them in the Media Library, and rewrites URLs.<\/li>\n<li>Smart Taxonomy Sync: Automatically syncs and assigns categories and tags to imported posts.<\/li>\n<li>Auto-Resume Engine: Resumes bulk imports after a crash or page reload.<\/li>\n<li>SEO Meta Mapping: Preserves metadata for Yoast SEO and Rank Math.<\/li>\n<li>Migration Reports: Every imported post is tracked with its original source URL and import timestamp.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install it directly via the WordPress admin panel.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Access the settings panel from <strong>AutoFetch Migration<\/strong> in the admin sidebar.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20is%20this%20different%20from%20the%20default%20wordpress%20importer%3F\"><h3>How is this different from the default WordPress importer?<\/h3><\/dt>\n<dd><p>AutoFetch imports content dynamically over the REST API without requiring XML files. It also handles media sideloading reliably without timeout errors.<\/p><\/dd>\n<dt id=\"what%20post%20types%20can%20i%20import%3F\"><h3>What post types can I import?<\/h3><\/dt>\n<dd><p>AutoFetch automatically detects all public post types (posts, pages, custom post types, WooCommerce products, etc.) available on the source site via the REST API.<\/p><\/dd>\n<dt id=\"can%20i%20import%20drafts%20and%20private%20posts%3F\"><h3>Can I import drafts and private posts?<\/h3><\/dt>\n<dd><p>Yes. Using the Application Password authentication method, you can access private, draft, and pending posts from the source site.<\/p><\/dd>\n<dt id=\"how%20do%20i%20set%20up%20application%20passwords%3F\"><h3>How do I set up Application Passwords?<\/h3><\/dt>\n<dd><p>On your source site, go to Users \u2192 Profile \u2192 scroll down to \"Application Passwords\". Enter a name like \"Migration\" and click \"Add New\". Copy the generated password and use it in the plugin settings.<\/p><\/dd>\n<dt id=\"is%20it%20safe%20to%20use%3F\"><h3>Is it safe to use?<\/h3><\/dt>\n<dd><p>Yes. The plugin includes protections against SSRF, XSS, and PHP Object Injection. Credentials are stored in temporary server-side transients that expire after 1 hour. REST API meta is only exposed to users with per-post edit capabilities.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Dynamic Post Type Detection: The plugin now automatically detects all available public post types from the source site via the REST API.<\/li>\n<li>Added Private status option to the import status selector.<\/li>\n<li>Security: REST API meta exposure now uses per-post capability checks instead of broad role checks.<\/li>\n<li>Full compliance with WordPress.org Plugin Directory Guidelines 5 and 6.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added Migration Reports tab: view full import history with source URLs and timestamps.<\/li>\n<li>Application Password authentication fully supported for accessing private and draft content.<\/li>\n<li>Streamlined the admin UI for a cleaner, more focused user experience.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Strengthened input validation and output sanitization across all modules.<\/li>\n<li>Improved server-side request handling with stricter URL validation.<\/li>\n<li>Added Toast notifications for real-time user feedback during operations.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<\/ul>","raw_excerpt":"Migrate posts, pages, custom post types, images, categories, and tags from one WordPress site to another via the WordPress REST API.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/326968","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=326968"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/linguaflow"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=326968"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=326968"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=326968"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=326968"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=326968"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=326968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}