A members-only post stops the text, but a PDF linked from it usually has a public address that anyone can share. RedeemID's protected files close that gap. Each download checks the visitor's access against the same Shopify tags that open the post, so a copied link is no use to someone who isn't entitled.

## Where the file should live

Two kinds of file sit well in different places:

- **A file someone buys once**, such as an ebook or a sample pack, can be sold and delivered by a Shopify digital downloads app, which emails the buyer a link.
- **A file that comes with a membership or a course**, such as worksheets, recordings or a back-issue archive, belongs on WordPress beside the posts it goes with. That is what this guide covers.

## 1. Choose who can download it

Open the file in the media library and set **Who can download**:

- **Whoever can read the item it's attached to:** the post's own rule decides, including drip and time windows. Use it for files that belong to one post or lesson.
- **Members holding a level:** for example *Members holding Gold*, for a library every Gold member can use.
- **Members with a feature:** for example a `downloads` feature granted by an add-on tag, when downloads are sold separately from reading.

Anything but **Everyone** moves the file into a protected folder, and every link WordPress builds for it then goes through the check. See [Protecting a file](/docs/protected-files/#protecting-a-file).

## 2. Close the folder on the web server

The check only holds if the web server refuses to serve the folder directly. On Apache and LiteSpeed RedeemID does this for you. On nginx, one rule goes in the site's configuration, or your host's support can add it. **Tools → Site Health** reports a critical issue while the folder is open. See [Close the folder on your web server](/docs/protected-files/#close-the-folder-on-your-web-server).

## What a visitor gets

- **A member with access** gets the file. PDFs, images, audio and video open in the browser, and everything else downloads. The response is never cached.
- **A signed-out visitor** is asked to sign in, with a link back to the post.
- **A signed-in visitor without access** is told their membership doesn't include the file, with a link to the post, where the wall explains how to get it.

Links saved before a file was protected still work for members: RedeemID redirects them to the checked address. Every download and refusal is recorded on **RedeemID → App events**.

## Limits

- **Keep protected files on the server.** Plugins that move uploads to a CDN or object storage bypass the protected folder.
- **Long videos:** seeking far into a file waits for the download unless the web server streams it. Turn on the server transfer with the `redeemid_file_sendfile` filter.
- **Image sizes:** old direct links redirect for the original file only, not for an image's other sizes.
- **Uninstalling** leaves protected files closed. Set each back to **Everyone** first if they should be public.
