{"id":310566,"date":"2026-05-25T19:36:18","date_gmt":"2026-05-25T19:36:18","guid":{"rendered":"https:\/\/es.wordpress.org\/plugins\/postsync-bridge\/"},"modified":"2026-05-25T20:12:56","modified_gmt":"2026-05-25T20:12:56","slug":"armandi-content-sync","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/armandi-content-sync\/","author":23495689,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.2","stable_tag":"0.1.2","tested":"7.0","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Armandi Content Sync","header_author":"Armando Caballero","header_description":"Import published posts from another WordPress site using its REST API or a standard WordPress export XML (WXR) file.","assets_banners_color":"22168c","last_updated":"2026-05-25 20:12:56","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/armandi.es","rating":0,"author_block_rating":0,"active_installs":0,"downloads":59,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"acaballerop","date":"2026-05-25 19:36:04"},"0.1.1":{"tag":"0.1.1","author":"acaballerop","date":"2026-05-25 19:59:05"},"0.1.2":{"tag":"0.1.2","author":"acaballerop","date":"2026-05-25 20:12:56"}},"upgrade_notice":{"0.1.2":"<p>Added optional Visual Composer\/WPBakery content normalization for imported content. Tested with WordPress 7.0 and PHP 8.3.27.<\/p>","0.1.1":"<p>Added WordPress.org plugin listing assets, Spanish translation support, and improved release metadata.<\/p>","0.1.0":"<p>Initial public release of Armandi Content Sync.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3548205,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3548205,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3548205,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3548205,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.0","0.1.1","0.1.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3548205,"resolution":"1","location":"assets","locale":"","width":1300,"height":891},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3548205,"resolution":"2","location":"assets","locale":"","width":1269,"height":1199},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3548205,"resolution":"3","location":"assets","locale":"","width":1322,"height":882},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3548205,"resolution":"4","location":"assets","locale":"","width":1395,"height":415}},"screenshots":{"1":"Manual import screen with REST API and classic XML import options.","2":"Active import progress panel with counters, current post details, and control actions.","3":"Settings screen with authentication, author, scheduling time and frequency, and media import options.","4":"Logs screen with per-run history, blocked media hosts, and CSV export actions."}},"plugin_section":[],"plugin_tags":[74387,4155,23853,251212,5098],"plugin_category":[59],"plugin_contributors":[264390],"plugin_business_model":[],"class_list":["post-310566","plugin","type-plugin","status-publish","hentry","plugin_tags-content-sync","plugin_tags-migration","plugin_tags-rest-api","plugin_tags-wordpress-export","plugin_tags-xml-import","plugin_category-utilities-and-tools","plugin_contributors-acaballerop","plugin_committers-acaballerop"],"banners":{"banner":"https:\/\/ps.w.org\/armandi-content-sync\/assets\/banner-772x250.png?rev=3548205","banner_2x":"https:\/\/ps.w.org\/armandi-content-sync\/assets\/banner-1544x500.png?rev=3548205","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/armandi-content-sync\/assets\/icon-128x128.png?rev=3548205","icon_2x":"https:\/\/ps.w.org\/armandi-content-sync\/assets\/icon-256x256.png?rev=3548205","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/armandi-content-sync\/assets\/screenshot-1.png?rev=3548205","caption":"Manual import screen with REST API and classic XML import options."},{"src":"https:\/\/ps.w.org\/armandi-content-sync\/assets\/screenshot-2.png?rev=3548205","caption":"Active import progress panel with counters, current post details, and control actions."},{"src":"https:\/\/ps.w.org\/armandi-content-sync\/assets\/screenshot-3.png?rev=3548205","caption":"Settings screen with authentication, author, scheduling time and frequency, and media import options."},{"src":"https:\/\/ps.w.org\/armandi-content-sync\/assets\/screenshot-4.png?rev=3548205","caption":"Logs screen with per-run history, blocked media hosts, and CSV export actions."}],"raw_content":"<!--section=description-->\n<p>Armandi Content Sync helps administrators import content from another WordPress installation in a controlled and secure way.<\/p>\n\n<p>You can work with two import methods:<\/p>\n\n<ul>\n<li>REST API import, started manually or scheduled with WP-Cron.<\/li>\n<li>Classic XML import using a standard WordPress WXR export file.<\/li>\n<\/ul>\n\n<p>The plugin is designed for content migrations, editorial consolidation, syndication between WordPress sites, and recovery workflows when the source site exposes only part of its content through the REST API.<\/p>\n\n<p>Main features:<\/p>\n\n<ul>\n<li>Manual REST API import.<\/li>\n<li>Classic XML WXR import.<\/li>\n<li>Classic XML import from a local server path for large files that cannot be uploaded through the browser.<\/li>\n<li>Dry run mode for REST API and XML imports.<\/li>\n<li>Pause, resume, and cancel controls for active imports.<\/li>\n<li>Scheduled REST API imports with a fixed execution time and a repeat frequency of daily, every 7 days, every 15 days, or monthly.<\/li>\n<li>Import of categories, tags, featured images, inline images, authors, and SEO metadata.<\/li>\n<li>Fallback local author assignment when the source site does not expose author details.<\/li>\n<li>Per-run logs with CSV export.<\/li>\n<li>Blocked media host reporting for failed image imports.<\/li>\n<li>Optional allowlist for trusted external media hosts such as source CDNs.<\/li>\n<li>Optional Visual Composer\/WPBakery content normalization for cleaner imported HTML.<\/li>\n<li>Optional authentication with WordPress Application Passwords when anonymous REST access is restricted.<\/li>\n<li>REST API overview in the manual import screen showing the active authentication mode and primary endpoint.<\/li>\n<\/ul>\n\n<h4>External services<\/h4>\n\n<p>This plugin does not send data to the plugin author or to any third-party SaaS service.<\/p>\n\n<p>When you use REST API import, the plugin connects only to the source WordPress site that you configure in the plugin settings. If you enable Application Password authentication, those credentials are used only for requests to that configured source site.<\/p>\n\n<h4>Security notes<\/h4>\n\n<p>To reduce risk during media imports:<\/p>\n\n<ul>\n<li>By default, remote images are downloaded only from the configured source host or its subdomains.<\/li>\n<li>If the source site uses a CDN or a separate image host, an administrator can explicitly allow those hosts.<\/li>\n<li>Blocked media hosts are listed in the import logs so administrators can review them before allowing any additional hosts.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>armandi-content-sync<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install the plugin through the WordPress admin.<\/li>\n<li>Activate the plugin through the <code>Plugins<\/code> screen in WordPress.<\/li>\n<li>Open the plugin settings page from the WordPress admin menu.<\/li>\n<li>Enter the base URL of the source WordPress site.<\/li>\n<li>If the source REST API is restricted, configure an Application Password with a valid user account from the source site.<\/li>\n<li>Adjust the import options to match your workflow.<\/li>\n<li>Open the manual import page and run a dry run or a full import.<\/li>\n<li>For very large XML files, copy the WXR file to the recommended uploads subdirectory and use the local server path import option instead of a browser upload.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20is%20the%20difference%20between%20rest%20api%20import%20and%20xml%20import%3F\"><h3>What is the difference between REST API import and XML import?<\/h3><\/dt>\n<dd><p>REST API import fetches content directly from the configured source WordPress site. XML import works from a previously exported WordPress WXR file.<\/p>\n\n<p>Large XML files can also be imported from a local server path when the hosting environment rejects browser uploads with errors such as <code>413 Request Entity Too Large<\/code>.<\/p><\/dd>\n<dt id=\"why%20are%20authors%20not%20always%20imported%3F\"><h3>Why are authors not always imported?<\/h3><\/dt>\n<dd><p>Some source sites block endpoints such as <code>users<\/code> through security plugins or custom rules. In those cases, the plugin may not have enough data to resolve the original author and will assign the post to the configured fallback local user.<\/p><\/dd>\n<dt id=\"when%20should%20i%20use%20an%20application%20password%3F\"><h3>When should I use an Application Password?<\/h3><\/dt>\n<dd><p>Use it when the source WordPress site restricts anonymous REST API access or blocks some of the endpoints required for a complete import.<\/p><\/dd>\n<dt id=\"how%20do%20scheduled%20imports%20work%3F\"><h3>How do scheduled imports work?<\/h3><\/dt>\n<dd><p>Scheduled imports run through WP-Cron. You can choose the execution time and the repeat frequency.<\/p>\n\n<p>Available frequencies are:<\/p>\n\n<ul>\n<li>Daily<\/li>\n<li>Every 7 days<\/li>\n<li>Every 15 days<\/li>\n<li>Monthly<\/li>\n<\/ul>\n\n<p>WP-Cron is traffic-based, so the task will usually run around the configured time rather than at the exact second.<\/p><\/dd>\n<dt id=\"why%20are%20some%20images%20shown%20as%20blocked%20in%20the%20logs%3F\"><h3>Why are some images shown as blocked in the logs?<\/h3><\/dt>\n<dd><p>The plugin limits remote media downloads to the source host and to any extra hosts that you explicitly allow. If the source site uses a CDN or a separate media domain, review the blocked hosts in the run detail view and allow only the trusted ones.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20depend%20on%20external%20services%3F\"><h3>Does the plugin depend on external services?<\/h3><\/dt>\n<dd><p>No. The plugin only needs:<\/p>\n\n<ul>\n<li>a source WordPress site that can be reached through the REST API, or<\/li>\n<li>a WordPress WXR export file.<\/li>\n<\/ul>\n\n<p>It does not depend on the plugin author's servers or on a third-party SaaS platform.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Added optional Visual Composer\/WPBakery content normalization for imported content.<\/li>\n<li>Improved cleanup of builder shortcodes, classes and attributes while preserving HTML, inline styles and images.<\/li>\n<li>Tested with WordPress 7.0 and PHP 8.3.27.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Added WordPress.org plugin listing assets.<\/li>\n<li>Added Spanish translation support if translation files already exist.<\/li>\n<li>Improved release metadata.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<li>REST API post import.<\/li>\n<li>Classic XML WXR import.<\/li>\n<li>Local server path import option for large XML files.<\/li>\n<li>Author, taxonomy, image, and SEO metadata import support.<\/li>\n<li>Dry run support for REST API and XML imports.<\/li>\n<li>Per-run logging and CSV export.<\/li>\n<li>Pause, resume, and cancel controls.<\/li>\n<li>Scheduled imports with fixed execution time and repeat frequency.<\/li>\n<li>REST API details panel showing authentication mode and primary endpoint.<\/li>\n<li>Security hardening for remote media and authenticated requests.<\/li>\n<\/ul>","raw_excerpt":"Import published posts from another WordPress site using the REST API or a standard WordPress export XML file.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/310566","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=310566"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/acaballerop"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=310566"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=310566"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=310566"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=310566"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=310566"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=310566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}