Release notes

What's new in PostDeploy Pro

New features and fixes, in plain language — newest release first.

Current version 0.9.87

  1. 0.9.87

    Latest
    • New

      Pushing a page that already exists on the destination — created independently, never pushed to before — now offers to update that existing page right in the push confirmation popup, instead of silently creating a duplicate under a renamed URL.

    • New

      A "Find & Replace" tool (PostDeploy Pro → Find & Replace) to repair content that was pushed while something was broken and ended up pointing at the source site's URLs — scoped only to posts this site has actually pushed or pulled, with a mandatory preview before anything is written.

    • New

      A push now tells you clearly, right in the progress popup, if the destination couldn't resolve Elementor/ACF/WPML references for the pushed page (e.g. its license isn't active) — previously this failed completely silently, with the push still reporting success.

    • Fixed

      A cache-busting bug that could leave your browser — or a host-level cache — serving an old, cached copy of core admin scripts indefinitely, no matter how many times the plugin was updated.

    • Fixed

      Restoring a Rollback or Snapshot History entry could bring back a fatal Elementor error on the restored page; Rollback now repairs that the same way a normal push already does.

    • Fixed

      The "license not active" warning only ever appeared on the License page itself, never on the Dashboard or other screens where a push actually happens.

  2. 0.9.77

    • New

      Pushing an Elementor page that uses a Loop Grid or Loop Carousel widget now offers to bring its Loop Item template along, right in the push confirmation popup — fixes a real crash that could happen opening (or even just viewing) the pushed page on the destination, caused by the Loop Grid pointing at a template that only existed on the source site.

  3. 0.9.76

    • Fixed

      Internal housekeeping only (uninstall cleanup moved to a standard integration hook, an outdated changelog cleanup) — no visible changes since 0.9.74.

  4. 0.9.74

    • Fixed

      The REST automation API's POST /deployments endpoint could reject a valid push request with a pull-flavored error whenever a connection's saved default direction wasn't explicitly "Push," even though the request correctly included a post ID. It now always does what the request actually asks for, regardless of the connection's saved default.

  5. 0.9.73

    • Fixed

      After pushing several languages of a page at once, the popup could finish with nothing but a greyed-out "Push Selected Languages" button and a "Cancel" link, giving no clear sign the push was actually done. It now hides the spent button and turns "Cancel" into an explicit "Close" once every language has finished.

  6. 0.9.72

    • Improved

      Pushing several languages of a page at once, when only some fail with a generic "destination unreachable" response while others clearly got through, now shows a short explanation and a one-click "Try again" button — that pattern almost always means a firewall or security plugin on the destination gave one request extra scrutiny, not a real connection problem.

  7. 0.9.71

    • Fixed

      A scheduled push — including Auto-Push on Publish — could fail right away with "This queued item has no object to pull," even though it was a push, not a pull. Scheduled pushes now always run correctly, no matter which direction a connection defaults to.

  8. 0.9.70

    • Fixed

      The "Deploy anyway?" prompt for a destination that had changed could appear hidden behind the push window it belonged to, with no visible way to confirm or cancel it. It now always appears on top.

  9. 0.9.69

    • Fixed

      On a site with a large number of posts and WPML translation groups, one translation could occasionally arrive with a sibling translation's content instead of its own, even though its own content was correct on the source site. This could happen when an internal WPML tracking number happened to coincide with a post's own ID — now impossible.

  10. 0.9.68

    • Fixed

      A push that got a "too many requests" response was retried automatically right away, which could make a busy connection trip that same limit again on the very next push. A "too many requests" response is no longer retried — only other kinds of unexpected responses are.

  11. 0.9.67

    • Fixed

      A translated page could still push the original language's content instead of its own, even after the previous fix — this happened when a multilingual plugin's field-syncing settings substituted a different post's stored value during export, regardless of which post was actually being pushed. Exporting a post's custom fields now always reads that exact post's own stored data.

  12. 0.9.66

    • Fixed

      A push could occasionally fail with a message about the destination site returning an unexpected response, even though the destination was working correctly — usually the first of several pushes made in quick succession, on a site with a firewall or security plugin in front of it. A push that gets this kind of response now automatically retries once before reporting a failure.

  13. 0.9.65

    • Fixed

      "Push Selected Languages" had no way to handle a destination that had changed since the last push — it just reported failure and stopped for those languages. It now offers the same "deploy anyway?" choice the single-language push already has, one language at a time.

    • Improved

      Cleaned up the look of the language push panel — clearer spacing, a status icon per language, and a wider popup so multi-language pages aren't cramped.

  14. 0.9.64

    • Fixed

      Pushing a translated Elementor page could send the original language's design instead of that translation's own real content, even though the translation's own content was correct on the source site. Translated pages now push their own real content.

  15. 0.9.63

    • Fixed

      A translation pushed after its first sibling could arrive with an unwanted "-2" (or similar) added to its web address, even though it never actually conflicted with anything on the original site. Translations now keep their original web address.

  16. 0.9.62

    • Fixed

      Pushing several languages of a WPML-translated post at once ("Push Selected Languages") always failed instantly for every language, with no explanation. It now pushes each language normally.

    • Fixed

      A pushed translation arrived as a disconnected post — the receiving site's WPML had no record it was a translation of anything. Pushing a translated post now links it into the correct translation group on the receiving site, whichever language is pushed first or after.

  17. 0.9.61

    • Fixed

      A few connection messages ("Could not reach the remote site", "The remote site rejected the connection credentials", and similar) weren't picked up for translation. They are now.

    • Improved

      Tightened how queue and snapshot actions read their inputs.

  18. 0.9.60

    • Fixed

      An Elementor page's page-level settings were lost on every push, so a page with "Hide Title" switched on showed its title on the receiving site, and page-level custom CSS and layout options were missing. These settings now arrive exactly as they were, and other custom-field values that hold a list of settings are no longer stored in an unusable form.

  19. 0.9.59

    • Fixed

      The dropdown in the Auto-Push box on the post editor screen was missing its arrow, so it didn't look like a dropdown. It now shows the standard WordPress arrow and spacing.

  20. 0.9.58

    • Fixed

      The Auto-Push box on the post editor screen showed a dark dropdown and faint helper text on WordPress's light editor when your computer was set to dark mode. It now always uses colors that match the WordPress editor.

  21. 0.9.57

    • Fixed

      Images in hand-written HTML on an Elementor page were still missing after a push when their address had no domain (for example /wp-content/uploads/2026/05/photo.png) or started with //. These are now found, imported into the receiving site's media library, and updated to the new location.

  22. 0.9.56

    • Fixed

      Images on a pushed Elementor page kept pointing at the original site instead of being imported into the receiving site's media library. Images now arrive and the page uses the receiving site's own copies — including background images, galleries, tabs and slides, images inside text/HTML blocks, and images that aren't tied to a media-library entry.

  23. 0.9.55

    • Fixed

      A large Elementor page pushed to a site running the free plugin (or an older or unlicensed copy) could arrive as a single flattened block of text instead of the real design, with no error shown. Pro now checks what the receiving site can read before sending, so the whole page arrives intact.

  24. 0.9.54

    • Fixed

      Pushing an Elementor page could fail with "design data is empty or invalid on the destination" — any page with formatted text or links inside its widgets was affected. The design data now arrives intact.

    • Fixed

      Backslashes in pushed content were silently dropped — for example Windows-style paths, code samples, and regular expressions in post content or custom fields, and special characters inside block content. Content and custom-field values now arrive exactly as they were on the source site.

  25. 0.9.53

    • New

      The Auto-Push box on the post editor screen now matches the plugin's own look instead of plain default styling.

    • Fixed

      The Auto-Push connection dropdown only showed one connection when more than one was set up. It now lists every connection, matching the Dashboard's own destination picker.

  26. 0.9.52

    • New

      Auto-push on publish. Pick a destination connection right on the post editor screen, and PostDeploy queues a push to that site as soon as the post goes live — including a normal WordPress scheduled publish, not just a manual click.

  27. 0.9.51

    • Fixed

      A post already pushed to one site could show as "already pushed" after you switched the push destination to a different site that had never received it.

  28. 0.9.50

    • Fixed

      Several links inside the plugin — switching the push destination on the Dashboard, and some Connections, Remote Content, Deployments, Logs, and Rollback links — could lead to a page that doesn't exist and show "you are not allowed to access this page".

  29. 0.9.49

    • Fixed

      A second, unlicensed "PostDeploy Pro" menu item could appear in the sidebar showing a generic activation screen instead of the plugin's real pages.

  30. 0.9.48

    • Fixed

      Activating the plugin could redirect to a broken page instead of the Dashboard.

  31. 0.9.47

    • Fixed

      Snapshots always showed as locked on the Settings page, even on a fully licensed site.

  32. 0.9.46

    • New

      License activation, built in. Enter your license key on the License page and activate it in one click — no separate account screen to deal with.

    • New

      License status now controls Pro features. Without an active license, ACF, Elementor & WPML reference resolution, new snapshots, new bulk and scheduled deployments, and WP-CLI commands are unavailable. Anything you created while licensed keeps working if your license later lapses — existing snapshots stay restorable and already-scheduled deployments keep running.

    • Fixed

      Several reliability fixes to license activation, including a case where it could silently fail with no reason shown, and a misleading message that appeared before the license was actually confirmed.

Looking for the free plugin's release notes? They're on its WordPress.org page.