Troubleshooting
Common issues and how to resolve them.
Connection issues
"Webhook URL not configured"
Go to Altered Digital → Settings and set the Service URL to your Worker URL. The webhook URL auto-populates from {service_url}/webhook/wp.
"Test Connection" fails
- Verify the Service URL is reachable from your server (some hosts block outbound requests).
- Check that the Webhook Secret in the plugin matches the Worker's stored secret.
- If behind a firewall, allowlist the Worker's IP range (Cloudflare Workers egress).
"not_authenticated" on analyze/quote
Your AD account session expired. Go to Altered Digital → Onboarding Wizard → Step 1 and log in again. The JWT is refreshed automatically on each login.
Migration issues
Posts show "pending" forever
- Check the Worker logs for errors.
- Verify your Sanity API token has write permissions.
- Run
wp altered-digital statusto see the local log. - If the Worker's D1 shows the post as
successbut WP showspending, the REST/status/post/{id}reconciliation hasn't run — trigger it by viewing the post in the admin.
"sanity_quota_exceeded" error
Your Sanity project hit its API quota or rate limit. Options:
- 402 (quota): Upgrade your Sanity plan or wait for the monthly quota reset.
- 429 (rate limit): Wait a few minutes and re-publish. The Worker retries automatically on the next webhook.
The webhook returns HTTP 503 with an actionable message so the plugin can surface the right guidance.
Featured image missing in Sanity
The asset upload failed. Check the Worker logs for assetErrors. Common causes:
- The WP media file is too large (Sanity has a 100MB limit per asset)
- The media URL returns 403 (hotlink protection on the WP server)
- The WP
wp:featuredmediaembed is missing (the plugin should always include it)
Posts save without mainImage when the asset upload fails — no placeholder is written.
Elementor post looks wrong
- Check the Worker logs for
AI_FALLBACK_NEEDED— the deterministic parser couldn't handle the widgets. - Run AI Cleanup after migration to refine the output.
- Unknown Elementor widget types route to AI transform fallback automatically.
WPBakery nested shortcodes
Shortcodes nested deeper than 3 levels yield confidence 0 → AI fallback. If the AI service is also unavailable, the content falls back to the HTML parser (graceful degradation). The post still migrates, but the layout may be flattened.
WP-CLI timeout
For very large sites, wp altered-digital export may hit PHP's max_execution_time. Increase it:
Or run in smaller batches with --offset:
Duplicate hooks
The plugin guards against duplicate transition_post_status hooks with has_action() at priority 99. If you see double-firing webhooks, another plugin may be re-adding the hook — check with:
Still stuck?
Contact support at ryan@altereddigital.com, or use the Priority Support add-on for Slack-based help.