=== Siteskyline Content Importer for Medium ===
Contributors: siteskyline
Donate link: https://siteskyline.com/
Tags: medium to wordpress, medium importer, medium migration, import medium, medium stories
Requires at least: 5.0
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Migrate Medium to WordPress with preview-first import, instant .zip extraction, live progress log, and SEO-friendly 301 redirects.

== Description ==

**A guided Medium to WordPress migration workflow**

Siteskyline Content Importer for Medium helps you move your stories, drafts, tags, and publications from Medium into WordPress without manual copy-pasting or server upload bottlenecks. You can import directly by uploading your Medium Export archive (`medium-export.zip`), selecting individual Medium story HTML files, or fetching recent stories via your Medium profile RSS feed.

* **Client-Side JSZip Extraction**: Unpack Medium export .zip archives directly in your browser without hitting PHP `upload_max_filesize` or execution timeout limits.
* **Preview-First Migration**: Check the archive or feed first to confirm stories, drafts, and tags before starting.
* **Batch Processing with Live Progress**: Watch each story import in real time with the live log and progress bar.
* **Pause, Resume, and Retry**: Easily pause an import and resume later from the exact same item.
* **SEO Preservation**: Preserves subtitles as meta descriptions (Rank Math, Yoast SEO, Sky SEO) and sets canonical 301 redirects.
* **Draft & Published Stories**: Import both published stories and draft drafts with configurable status mapping.
* **Tag & Category Mapping**: Automatically map Medium tags to WordPress categories and tags.
* **Clean HTML Formatting**: Cleans Medium markup, figures, captions, blockquotes, and code blocks into standard WordPress content.

= Free Version Limits =

The free version imports up to **50 stories** and **20 drafts** per run. The preview screen clearly shows what will be imported before you start.

= Upgrade to Pro =

**[Get the Pro Version](https://siteskyline.com/medium-to-wordpress/)**

The Pro version is designed for larger blogs, publishers, and publications:

* Unlimited story and draft imports
* Complete Media Sideloader: downloads all Medium CDN images into native WordPress Media Library and rewrites content links
* Dedicated Media Downloader tab with retry queue and bulk stats
* Custom domain 301 redirect engine and exportable server rules (.htaccess / Nginx)
* Priority 1-on-1 migration support

== External Services ==

This plugin optionally connects to external services:

= Medium Public RSS Feeds =
* **Service Description and Purpose**: Allows users to import stories directly from a public Medium profile or publication via RSS feed without downloading an export file.
* **Data Sent and Timing**: When the administrator enters a public Medium profile or publication URL (e.g. `https://medium.com/@username`) in the RSS import tab, WordPress fetches the public XML feed from Medium via `wp_remote_get()`. No user credentials, personal data, or WordPress site information is sent to Medium.
* **Service Provider**: A Medium Corporation (https://medium.com)
* **Terms of Service**: https://policy.medium.com/medium-terms-of-service-9db0094a1e0f
* **Privacy Policy**: https://policy.medium.com/medium-privacy-policy-f03bf92035c9

= Siteskyline Telemetry (opt-in) =
* **Service Description and Purpose**: Anonymous diagnostic reporting used to help the developers detect and fix HTML parsing, memory, cURL, and media sideloading errors quickly. The service is completely optional and disabled until the administrator explicitly opts in.
* **Data Sent and Timing**: Only transmitted after the administrator clicks "Allow & Continue" in the one-time welcome prompt, or enables "Usage & Error Diagnostics" in the plugin Settings. Data is sent when consent is granted and then when a Medium import error occurs (throttled). The payload includes the plugin version, WordPress version, PHP version, site URL, memory/execution/upload limits, database version, available extensions (cURL, OpenSSL, Zip), multisite flag, error step, and error message. No post contents, credentials, or personal data are sent.
* **Service Provider**: Siteskyline (https://siteskyline.com/)
* **Terms of Service**: https://siteskyline.com/terms/
* **Privacy Policy**: https://siteskyline.com/privacy/

= Siteskyline Deactivation Feedback (optional) =
* **Service Description and Purpose**: An optional short survey shown when the administrator deactivates the plugin, used to understand why users leave and to improve future releases.
* **Data Sent and Timing**: Only transmitted when the administrator selects a reason and clicks "Submit & Deactivate". Skipping the prompt sends nothing. The payload includes the selected reason, optional notes, plugin version, WordPress version, PHP version, and the number of imported items. No post contents, credentials, or personal data are sent.
* **Service Provider**: Siteskyline (https://siteskyline.com/)
* **Terms of Service**: https://siteskyline.com/terms/
* **Privacy Policy**: https://siteskyline.com/privacy/

= SiteSkyline Plugin Catalog =
* **Service Description and Purpose**: Powers the "✦ Explore Plugins" screen with a live list of other free SiteSkyline WordPress plugins that can be installed and activated directly from the dashboard.
* **Data Sent and Timing**: When an administrator opens the Explore Plugins screen and the local cache is empty, WordPress requests the public JSON catalog from the SiteSkyline app (cached for 7 days). No personal data, credentials, or site content are sent.
* **Service Provider**: Siteskyline (https://siteskyline.com/)
* **Terms of Service**: https://siteskyline.com/terms/
* **Privacy Policy**: https://siteskyline.com/privacy/

== Installation ==

1. Upload the `siteskyline-content-importer-medium` folder to the `/wp-content/plugins/` directory, or install the plugin directly through the WordPress plugins screen.
2. Activate the plugin through the 'Plugins' screen in WordPress.
3. Go to the 'Medium Importer' menu in your WordPress admin dashboard.
4. Upload your Medium export .zip archive, select your story HTML files, or enter your Medium profile URL.
5. Click 'Preview & Start Import' to begin your migration.

== Frequently Asked Questions ==

= How do I download my Medium export file? =

In Medium, go to Settings > Security and apps > Download your information. Medium will email you a download link for `medium-export.zip`.

= Can I import unpublished Medium drafts? =

Yes. Medium export archives contain both published stories and drafts (named `draft_*.html`). You can choose to import them as WordPress Drafts or publish immediately.

= Do I need Medium API access? =

No. Medium deprecated its API tokens. This plugin works directly with Medium's official export files and public RSS feeds.

= How do 301 redirects work? =

The plugin stores the original Medium story slug in post meta (`_ssmeim_medium_slug`). When you enable 301 redirects in the Settings tab, any visits to your old Medium story URLs on this domain will be seamlessly redirected to the new WordPress post.
