EP Cards Importer
EP Cards Importer is the official migration add-on for EP Cards. Feed it a JSON export from your WordPress site, click Preview, click Commit, done. Thesis Focus Cards content lands in EP Cards with images rehosted locally and every import as a single rollbackable batch.
Published by ElmsPark Studio.
Overview
Section titled “Overview”The importer handles both Thesis Focus Cards flavours from a single upload path:
- The standalone Thesis addon plugin (
wp-content/thesis/boxes/focus-cards/with fully-populated_focus_cards-optionsmeta). - The Focus skin’s built-in
focus_cardsCPT (mostly empty meta, style from theme-level settings).
Two-step workflow: Preview parses the JSON and shows you exactly what will happen, Commit writes it to the database. Between the two, you can check sample cards render correctly, see which groups will be created, and catch any warnings about source content that doesn’t fit cleanly.
Everything in one import shares a batch UUID. If it goes wrong, the Delete button on the batch row deletes every group and card from that import in one SQL cascade. Zero manual cleanup.
Requirements
Section titled “Requirements”- PageMotor 0.8.2b or later
- EP Cards core (must be active before the importer will commit)
- PHP limits: 50M
upload_max_filesize, 50Mpost_max_size, 256Mmemory_limit. The settings page shows a preflight panel that flags any of these as red if they are too low. - EP WP Exporter or its legacy
pm-exporterpredecessor running on the source WordPress site to produce the JSON.
The end-to-end migration
Section titled “The end-to-end migration”On the source WordPress site
Section titled “On the source WordPress site”- Install EP WP Exporter.
- Go to Tools → EP WP Export.
- Untick every default checkbox. Tick only “Focus Cards (for EP Cards Importer add-on)”.
- Click Export for PageMotor. A JSON file downloads.
On the destination PageMotor site
Section titled “On the destination PageMotor site”- Install both EP Cards core and EP Cards Importer.
- Open the EP Cards Importer settings page.
- Confirm the preflight panel shows green (PHP limits adequate, EP Cards core active).
- Click Choose File, pick the JSON, click Preview Import.
- Review:
- Parsed groups.
- Sample rendered cards.
- Proposed global style options (from the source’s theme settings).
- Any warnings.
- Click Import these cards to commit.
- The image rehoster runs automatically. Watch the response panel for per-image download stats.
- If any images failed, click Rehost on the batch row in the Import History panel to retry just those. Idempotent — successful images are never re-downloaded.
What gets migrated
Section titled “What gets migrated”The importer maps Thesis fields to EP Cards columns:
| Source field (WordPress) | Destination column (EP Cards) |
|---|---|
post_title | title |
post_content | body (sanitised on write) |
featured_image.url | image_url (rehosted to your local uploads) |
featured_image.alt | image_alt |
meta._focus_cards-options.subtitle | subtitle |
meta._focus_cards-options.url | link_url (whole-card link) |
meta._focus_cards-options.title-url | title_link |
meta._focus_cards-options.image-url | image_link |
meta._focus_cards-options.display.center | centered |
meta._focus_cards-options.display.title-off | title_off |
meta._focus_cards-options.display.image-only | image_only |
meta._focus_cards-options.class | custom_class |
meta._focus_cards-custom-image.* | Overrides featured_image |
taxonomies.focus_cards_group (slug) | Derives a group, sets group_id |
theme.focus.options.focus_cards | Offered as new global defaults on Preview |
Per-card style overrides (style, corners, spacing, hover) are NOT migrated because Thesis Focus Cards stores styling globally rather than per-card. Imported cards inherit your site’s EP Cards global defaults. If you need per-card variation, adjust after import.
Image rehosting
Section titled “Image rehosting”The rehoster runs as a separate pass after structural import:
- Walks every card marked
needs_rehost=1in the batch. - Downloads each featured image and every inline
<img src>from the body HTML to your local PageMotor uploads directory. - Rewrites stored body HTML to point inline images at the new local URLs.
- SVG-aware: content-type detection, viewBox parsing for dimensions when
getimagesize()fails. - Curl bounded: 10-second connect timeout, 30-second total timeout, 10MB max body via progress callback, max 3 redirects.
- Failure-tolerant: any single image failure leaves
needs_rehost=1on the card so a second Rehost run picks up where the first left off. Never aborts the structural import halfway through. - Re-runnable via the Rehost button on the import history table. Repeated runs only try images still flagged as needing rehost.
Legacy shortcode compatibility
Section titled “Legacy shortcode compatibility”The importer registers two legacy shortcode aliases that dispatch to EP Cards core:
[card]→[ep_card][card_group]→[ep_card_group]
This means page content that was copied verbatim from a Thesis source site (which used the unprefixed [card] shortcode) renders unchanged after migration. No search-and-replace across your content is needed.
Three failure modes, clearly distinguished
Section titled “Three failure modes, clearly distinguished”The importer recognises and reports three separate problems with your JSON:
- “No Focus Cards data in this export.” You exported without ticking the Focus Cards checkbox. Re-export with that checkbox on.
- “No Focus Cards plugin installed on the source site.” The CPT is not registered. Check that Thesis Focus Cards (either flavour) is active on the source.
- “Focus Cards plugin present but no content.” CPT is registered but no posts exist. The source site simply has no cards to export.
Generator string acceptance
Section titled “Generator string acceptance”The importer accepts JSON from both exporter lineages:
EP WP Exporter X.Y.Z(1.3.0 and later).PageMotor Exporter X.Y.Z(legacy, pre-1.3.0).
In-flight migrations where the source site hasn’t upgraded its exporter yet still work.
Rollback
Section titled “Rollback”Every import stamps a batch UUID on every row it writes. The Import History panel lists every batch with a Delete button. Clicking it cascade-deletes:
- Every card stamped with that batch ID.
- Every group stamped with that batch ID.
- The batch row itself.
Other cards and groups (from other imports, or hand-created) are untouched.
Troubleshooting
Section titled “Troubleshooting”“The preflight panel shows red for upload_max_filesize”
Section titled ““The preflight panel shows red for upload_max_filesize””Edit your PHP config (/etc/php/8.2/fpm/php.ini or equivalent) and set upload_max_filesize = 50M and post_max_size = 50M. Reload PHP-FPM. Reload the settings page.
“The import succeeds but images are broken”
Section titled ““The import succeeds but images are broken””The rehoster ran into errors. Open the batch in Import History, look at the per-image stats. Common causes:
- Source image URLs require authentication (private WordPress sites).
- Source images are huge and exceed the 10MB cap.
- Source site has firewall rules blocking your PageMotor server.
Click Rehost on the batch row after fixing the underlying issue.
“Groups are created but all cards are ungrouped”
Section titled ““Groups are created but all cards are ungrouped””The source JSON doesn’t have the focus_cards_group taxonomy populated on the cards, or the group slugs in taxonomies don’t match what the importer created as groups. The preview panel warns about this specifically.
“The [card] shortcode still doesn’t work after import”
Section titled ““The [card] shortcode still doesn’t work after import””The importer registers legacy aliases only if it is active. If you uninstalled EP Cards Importer after migration, the aliases are gone. Either re-activate the importer, or do a global search-and-replace in your content from [card to [ep_card.
“Rerunning the import duplicates cards”
Section titled ““Rerunning the import duplicates cards””Use Delete on the existing batch first. The importer does not deduplicate cards across batches — it trusts you to roll back before re-importing.
Feedback and corrections
Section titled “Feedback and corrections”For a quick question about this plugin, EP Support inside your admin is the fastest option. The chat widget sits on every EP plugin settings page and knows which one you’re on, with starter questions and links preloaded for that exact screen.
For anything bigger — a bug report, a feature request, or a “how do I…” that needs a real reply — open a ticket at help.elmspark.com. A real person, helped by AI, writes the reply. Usually within a few hours. Tickets don’t disappear into the void.