GT Downloads Manager — Free WordPress Plugin for File Tracking

GT Downloads Manager is a free WordPress plugin for organizing and tracking downloadable files — ebooks, templates, plugins, whatever your readers need. One custom post type, a clean admin UI, and download counts that survive caching.

I built GT Downloads Manager in 2024 because the plugins I tried for managing the 40-odd downloads on gauravtiwari.org either wanted $79 a year to do basic file tracking, or were bundled with page-builders I had no interest in. The brief was small: store files, show them as blocks, count downloads reliably on a CDN-fronted site. That is exactly what ships.

What GT Downloads Manager does

  • Registers a gt_download custom post type with title, description, featured image, file upload, category, and optional external URL
  • Ships a Gutenberg block that renders any download — or a filtered grid of downloads — into any post or page
  • Tracks download counts accurately by incrementing on the file-redirect URL, not the page view, so CDN caching never inflates numbers
  • Stores file metadata (size, type) so downloads list shows “PDF · 2.4 MB” without a plugin doing a live file stat
  • Ships with a CSV import so you can migrate from Easy Digital Downloads or Pretty Links without reuploading files
  • No settings page bloat — everything lives in the post type UI and a single Tools screen

Install and use

Install from the GitHub release zip or clone into wp-content/plugins/gt-downloads-manager/. Activate. A new Downloads menu appears. Add a file, set its category, publish. Insert the GT Downloads block anywhere — pick a specific download or filter by category for an auto-listing.

<?php
/**
 * Tiny example: get the top 5 most-downloaded files.
 * Works anywhere after the plugin is active.
 */
$top = get_posts( [
    'post_type'      => 'gt_download',
    'posts_per_page' => 5,
    'meta_key'       => '_gt_download_count',
    'orderby'        => 'meta_value_num',
    'order'          => 'DESC',
] );

foreach ( $top as $d ) {
    printf(
        '%s — %d downloads',
        esc_html( $d->post_title ),
        (int) get_post_meta( $d->ID, '_gt_download_count', true )
    );
}

How it works

Downloads live as their own post type so every file gets a WordPress permalink, REST endpoint, and standard archive/taxonomy surface without bespoke routing. Files are stored in wp-content/uploads/gt-downloads/ with an .htaccess deny rule so hotlinkers cannot skip the tracker. A download URL like /download/my-ebook/ hits a tiny PHP shim that increments _gt_download_count post meta, sets proper Content-Disposition headers, and streams the file. Because the redirect URL is hit directly — not the post page — Flying Press, Cloudflare, or any other cache front cannot inflate or suppress counts.

Download and source

FAQs

Does this work with Cloudflare or Flying Press?

Yes. Download counts increment on the redirect URL hit, which fires PHP on every request regardless of HTML cache state. The file itself is served from the canonical upload location so you still get byte-range + CDN caching for the binary.

Can I restrict downloads to logged-in users?

Yes. Each download has a “visibility” field: public, registered users, or specific roles. Gated downloads redirect unauthenticated requests to wp-login.php with a return URL.

Does it handle large files (PDFs, zip archives)?

Files up to your PHP upload_max_filesize are supported on direct upload. For anything larger, upload via SFTP and point the download at the path. Streaming uses readfile() in chunks so 500 MB zips do not exhaust memory.

What happens to download counts if I deactivate the plugin?

Counts live in postmeta and survive deactivation. Reactivate and numbers come back intact. Uninstall with “delete data” removes them.

Is there a Pro version?

No. The entire plugin is MIT on GitHub. If you want email gating or drip-sequence integration, the recommended route is pairing with FluentCRM or FluentForms — both play nicely with the plugin hooks.

Does it replace Easy Digital Downloads?

It is not an e-commerce plugin — there is no cart, no checkout, no licensing. For free downloads, yes, it replaces EDD cleanly. For paid digital products, use FluentCart or EDD.