UUPD & Easy Digital Downloads

Tech Articles | 3 May 2026 | Blog, Coding, EDD, General, Plugins

I have spent the last few days working on UUPD Beta.2 to further the work on pre-release channels and how this works, including the ability to now send re-release information to the server you are collecting releases on and updating my generation scripts and UUPD to look for new important markers to make updates easier.

Example New Markers

{
    "slug": "example-plugin",
    "name": "Example Plugin",
    "version": "1.0",
    "author": "Nathan Foley",
    "author_homepage": "https://reallyusefulplugins.com",
    "requires_php": "8.0",
    "requires": "6.5",
    "tested": "6.9.4",
    "sections": {
        "description": "This is just an example plugin to test updates",
        "installation": "1. Upload the `example-plugin` folder to the `/wp-content/plugins/` directory.<br />\n2. Activate the plugin through the 'Plugins' menu in WordPress.<br />\n3. Update as needed",
        "frequently_asked_questions": "= How do I modify the settings =<br />\nThere ae no settings on this plugin",
        "changelog": "<h4>2.0.0 15 April 2026</h4><ul><li>Breaking: Tag mappings must be recreated after updating from any 1.x version</li><li>Breaking: Manual Price ID entry replaced with SureCart product and price dropdown selectors</li><li>Warning: Please review and remap your tags after updating to ensure correct behaviour</li><li>New: SureCart product lookup added to admin page</li><li>New: SureCart price/version dropdown selector added</li><li>New: \u201cAll prices for this product\u201d mapping option</li><li>New: Product-level mapping support (single rule for all prices)</li><li>New: Mapping filters (search, status, and type)</li><li>New: Add Mapping button added to both top and bottom of mappings screen</li><li>Improvement: Modernised admin UI with card-based layout</li><li>Improvement: Enhanced mapping UX with dynamic product/price selection</li><li>Improvement: Improved purchase matching logic for product-wide and price-specific rules</li><li>Removed: Friendly Name field (no longer required with product/price display)</li><li>Compatibility: Continued support for FluentCRM tag assignment</li><li>Compatibility: Maintained compatibility with SureCart checkout hooks</li><li>Compatibility: Updater and MainWP integration retained</li><li>1.0.17 06 April 2026 =</li><li>Fixed: Admin Menu</li></ul><h4>1.0.16 23 March 2026</h4><ul><li>Update: Updater to 2.0-Alpha</li><li>Update: Compatibility</li></ul><h4>1.0.15 12 August 2025</h4><ul><li>New: Deploy Methodology</li><li>New: Production Test - New deploy.sh</li><li>Fixed: Icon Issue</li></ul><h4>1.0.14 7 August 2025</h4><ul><li>New: Deploy Methodology</li></ul><h4>1.0.13 5 August 2025</h4><ul><li>Fixed: Comment out WP Icon Filter which is causing issues in latest MainWP</li></ul><h4>1.0.12 2 Aug 2025</h4><ul><li>New: MainWP Icon Filter</li></ul><h4>1.0.11 27 July 2025</h4><ul><li>New: Prepare Future Support for Preleases</li><li>New: Updated UUPD to 1.3.0</li></ul><h4>1.0.10 14 July 2025</h4><ul><li>Update: UUPD 1.2.5</li></ul><h4>1.0.9 06 July 2025</h4><ul><li>New: Rescoped RUP_UUPD</li><li>Update: UUPD 1.2.4</li></ul><h4>1.0.8 21 June 2025</h4><ul><li>New: Updates Now served directly from GitHub using UUPD</li></ul><h4>1.0.7 (27 May 2025)</h4><ul><li>Improve: Updater Class robustness in WP 6.8</li></ul><h4>1.0.6 (26 May 2025)</h4><ul><li>New: Admin Overhaul Part 1</li><li>New: Multi-Tag Support</li><li>New: SurelyWP Hook Added</li></ul><h4>1.0.5 (25 May 2025)</h4><ul><li>New: Delete Parings</li></ul><h4>1.0.4 (23 May 2025)</h4><ul><li>Tweak: First Automatic Updater Test</li></ul><h4>1.0.3 (23 May 2025)</h4><ul><li>New: Added Automatic Updater</li></ul><h4>1.0.2 (22 May 2025)</h4><ul><li>New: Allow each mapping to be disabled i.e. for offer periods.</li></ul><h4>1.0.1 (20 May 2025)</h4><ul><li>New: Added Dynamic Loading of Tags</li></ul><h4>1.0 (19 May 2025)</h4><ul><li>New: Initial Release</li></ul>"
    },
    "last_updated": "2026-05-03 15:14:39",
    "download_url": "https://github.com/stingray82/example-plugin/releases/latest/download/example-plugin.zip",
    "banners": {
        "low": "https://raw.githubusercontent.com/stingray82/example-plugin/main/uupd/banner-772x250.png",
        "high": "https://raw.githubusercontent.com/stingray82/example-plugin/main/uupd/banner-1544x500.png"
    },
    "icons": {
        "1x": "https://raw.githubusercontent.com/stingray82/example-plugin/main/uupd/icon-128.png",
        "2x": "https://raw.githubusercontent.com/stingray82/example-plugin/main/uupd/icon-256.png"
    },
    "stable_version": "1.0",
    "stable_download_url": "https://github.com/stingray82/example-plugin/releases/latest/download/example-plugin.zip",
    "prerelease_version": "1.0.1-alpha.1",
    "prerelease_download_url": "https://github.com/stingray82/example-plugin/releases/download/v1.0.1-alpha.1/example-plugin.zip"
}
JSON

We now have a stable_version, stable_download_url, prerelease_version and prerelease_download_url being generated and can be used as well as the traditional do everything download_url, This keeps our backward compatibility, too.

Why go to all the effort?

I wrote an example of something similar that could be done using filters, a few weeks ago in V2.0 I wanted to make this easier, faster and better.

So, as well as parallel product channels and simple pre-release support, we make it more modern, flexible, and increase delivery

pre release selector

So in these circumstances, now you could use which would work with V2.0, i.e., where there was a significant difference in code base, where divergence long term is your plan, eventually all will be served via V2, but keeping your V1 channel available for future updates, i.e., patching security issues.

add_filter(
    'uupd/server_url/myvendor/my-plugin',
    function ( $url, $vendor, $slug, $instance_key ) {

        $channel = get_option('my_plugin_update_channel', 'stable');

        if ($channel === 'beta') {
            return 'https://example.com/updates/my-plugin-beta.json';
        }

        if ($channel === 'v2') {
            return 'https://example.com/updates/my-plugin-v2.json';
        }

        return $url;
    },
    10,
    4
);
PHP

Equally, to allow a V4 to be fully developed while still working on V3, i.e., in a pre-release capacity, you could use release channels, i.e stable → beta → rc → prerelease

Easy Digital Downloads

I’ve had to do some work with EDD the last few weeks for several reasons. I need to use it for a plugin update delivery due to the client requiring Paddle as a gateway and needing other EDD explicit items, so I couldn’t use FluentCart.

I have issues with EDD. There is a reason I don’t use it often, and that’s mainly its main selling point to a lot of users, its plugin and theme update process is flaky at best. Add in the poor default shortcodes/blocks and the checkout config, and it becomes too much work.

That being said, for the checkout and the plugin shortcodes, I have had to do this work, so I have now made it reusable, and it’s removed one of the big headaches for using it for me.

The flaky updater I have also solved too by switching to UUPD, I have been working on a new UI Class to be released with 2.0, it will allow paid plugins to be updated using UUPD and will be released with several compatibility layers for some of the most common setups, including EDD as well as several others, including FluentCart.

While finishing off and working on EDD i wanted to complete the pipeline and have spent a few hours this weekend pushing out a full pipeline, which you can see here: https://github.com/stingray82/example-plugin/blob/main/deploy.cfg and here: https://github.com/stingray82/example-plugin/blob/main/deploy.sh. This allows me to deploy to EDD with the update handled by SyncBackPro and the pipeline being deployed directly, pushing the version on publish to GitHub, including for private repos.

I am still doing quite extensive testing with Paddle-for-easydigitaldownloads on and off to know if all this work will be worth the effort but I don’t think it’s lost work as it allowed me to pull together another compatibility layer UUPD > EDD, and in addition, fix one of my main issues with EDD, the flaky update process now it’s rock solid, powered by something I know.

I hope to release the beta of UUPD-UI-Class at around the same time as UUPD RC1 and take them both to the main release within about a month of that release.

Support the Author

Support my work
Really Useful Plugin Logo
Wpvideobank temp
Appoligies for any spelling and grammer issue. As a dyslexic i need to rely on tools for this they like me are not perfect but I do try my best