Skip to content

Documentation

Document Engine documentation

How to set up and use Document Engine and Document Engine Pro: document libraries, the built-in PDF viewer, Post to PDF, and the Pro tools for access control, records and compliance. Sections marked Pro need the Pro add-on.

36 free and 24 Pro guides on one page. Requirements: WordPress 6.6+ · PHP 7.4+ · GPLv2

Getting started

What Document Engine does Free #

Document Engine turns WordPress into a document library. Each file (PDF, Word, Excel, PowerPoint, images, audio, video, archives) becomes a document with its own title, description, categories, tags and page. You publish documents in searchable libraries, show PDFs in a built-in viewer that runs on your own site, and serve every download through one file server that counts downloads and applies access rules.

It also includes Post to PDF: a "Download PDF" button that turns posts and pages into PDFs on your server.

  • Free plugin: documents and document pages, libraries (table, grid, folders) with instant search and filters, the PDF viewer, preview popup, document lists, search box, QR codes, Post to PDF, accessible format requests, migration from other plugins, blocks, shortcodes and Elementor widgets.
  • Document Engine Pro (a separate add-on): access control and protected storage, share links, secure viewer and stamped downloads, email gate, activity log and reading analytics, versions, review and expiry dates, read-and-confirm, notifications, bulk and CSV import, custom fields, front-end submissions, My Documents, handbook PDFs, search inside files, abuse protection and WP-CLI.

The free plugin has no time limit and no limit on documents or libraries.

Requirements and installation Free #

Requirements

  • WordPress 6.6 or newer and PHP 7.4 or newer.
  • Post to PDF needs the PHP mbstring and gd extensions, and a writable uploads folder. Tools → Site Health reports anything missing.

Install the free plugin

  1. Go to Plugins → Add New Plugin, search for "Document Engine", then click Install Now and Activate. Or download it from WordPress.org and upload the ZIP under Plugins → Add New Plugin → Upload Plugin.
  2. A Documents menu appears in the admin sidebar.

Pro is a separate plugin that needs the free plugin. See Install Pro and activate your licence.

Where everything is Free #

All screens live under the Documents menu. Related screens are grouped behind one menu item with tabs, so the menu stays short.

Menu itemWhat you find there
DashboardTotals, most downloaded and recently updated documents, a setup checklist and quick actions (add a document, create a library page, set up Save as PDF).
All Documents, Add NewThe documents list and the document editor.
CategoriesDocument categories, with Tags as a second tab.
ReportsFormat requests. With Pro also Activity, Searches, Leads and Acknowledgements.
ToolsMigrate. With Pro also Import and Handbook PDF.
SettingsTabs: Documents, PDF Viewer, Post to PDF, Advanced. With Pro also Access & Pro, Fields and License.
Free vs ProA comparison, and a form to install Pro with your licence key. Shown while Pro is not active.
DocsThis documentation inside WordPress, with search. Each screen has a Help link to the matching article.

Press Ctrl+K (Cmd+K on a Mac) anywhere in the admin to add a document, open the documents list, the dashboard or the settings, or jump to a document by typing its title.

Recommended first setup Free #

  1. Go to Documents → Settings → Documents. Keep Pages on so every document has its own page, and choose what the Download button does (download the file, or open it in the browser).
  2. Open the Library section of the same tab and choose the default Layout and Documents per page for new libraries.
  3. Create a few categories under Documents → Categories, for example Policies, Minutes and Forms.
  4. Under Documents → Settings → Advanced → Permissions, choose which roles manage all documents and which can publish or draft their own (see Who can manage documents).
  5. Add your first documents, then publish a library page.

The Dashboard has a Publish a document library action that creates a page with a Document Library block in one click.

Add your first document Free #

  1. Go to Documents → Add New.
  2. Enter a title. In the sidebar's Document file panel, click Upload or choose file to upload a file or pick one from the Media Library, or choose Link to a file on another site and paste an address (Google Drive, Dropbox, OneDrive or any web address).
  3. Optionally write a description in the editor, add categories and tags, and set a thumbnail.
  4. Under When visitors click Download, keep the site default or choose Download the file or Open in the browser for this document.
  5. Publish. The document gets a page such as /documents/annual-report/ with a download button and, for PDFs, the viewer.

Turn Media Library files into documents

Go to Media → Library, switch to the list view, tick the files and choose the Create documents bulk action. Each file becomes a document named after it.

Pro adds Documents → Tools → Import for dropping in many files at once or importing a CSV spreadsheet. See Bulk and CSV import.

Publish a document library Free #

  1. Create a page, for example "Documents".
  2. Add the Document Library block. In the block sidebar choose the Layout (table, grid or folders), the Columns, which categories, tags and file types to include under Documents to include, and which filters visitors see under Search and filters.
  3. Publish. Visitors can search as they type, filter, sort and page through the documents.

Not using the block editor? Use [document_engine_library] (see Shortcodes) or the Elementor Document Library widget.

Documents and libraries

Documents and document pages Free #

Documents are their own content type with categories and tags. Each has a file (uploaded, picked from the Media Library, or linked from another site), a download counter and, when Pages is on, its own page showing the file type, size, last update, categories, a download button and, for PDFs, the viewer.

  • File links go through the document file server (/?dengine_download=ID), so download counts and access rules always apply. Replacing the file keeps the same link.
  • Replace a file: open the document and click Replace in the Document file panel. The page address and download link stay the same, so links in emails and other pages keep working.
  • Site search includes documents unless you switch off Site search in Documents → Settings → Documents.
  • The documents list shows each document's file, category, downloads and last update, with filters for category and file type, and a Download row action.
  • With Pages off, documents have no page of their own and titles in libraries link straight to the file.

The free plugin does not restrict who can download a published document: anyone with the link can download it. WordPress's own Password protected visibility is respected (the download asks for the password), but the file itself stays in the public uploads folder. Use Pro access control for private documents.

QR codes

Every published document has a QR code that points to its page. Open the document, go to the Document file panel, open QR code and click Show. Download it with Download PNG or Download SVG for notices, agendas or handouts.

Document Library: search, filters and layouts Free #

The Document Library block (and the [document_engine_library] shortcode and Elementor widget) lists documents as a table, a grid of cards, or folders by category. Tables turn into cards on small screens.

  • Search box: results update as visitors type. The library also works without JavaScript.
  • Filters: Category (with document counts), Tag, File type, Year, Author and Sort order. Turn on Let visitors pick several to show category, tag and file type as checkboxes so visitors can combine choices. Choices within one filter widen the results; different filters narrow them.
  • Active filters show as removable chips above the results, with a "Clear all" link.
  • Shareable views: the page address carries the search and filters, for example ?dl_cat=policies,forms, so a filtered view can be bookmarked or sent.
  • Columns (table) or card details (grid): Thumbnail, Title, Description, Category, Tags, Type, Size, Date, Updated, Author, Downloads and Download.
  • Order by: Newest first, Oldest first, Title A–Z, Title Z–A, Recently updated or Most downloaded. The shortcode also accepts menu order and random order.
  • Document titles link to: the document page, the file, or nothing.
  • Several libraries on one page each keep their own search, filters and address parameters.

The folder layout lists each category as a folder (Open folders by default expands them). When a visitor searches or filters, it switches to a flat list of results.

Pro adds custom field columns, filters and sort options, a Select column with "Download selected (ZIP)", search inside file contents, and locks or hides documents people cannot open.

Preview popup

Libraries show a View button next to Download for PDFs (switch it off with View button in Documents → Settings → Documents → Library).

Set View opens to A preview popup to open documents in a popup instead of going to their page: PDFs in the viewer, and images, audio and video in the browser's own player (these also get a View button). The popup has Open page and Download buttons and closes with Esc.

The popup only shows documents the visitor may open. Other file types, such as Word or Excel, have no View button.

Blocks and Elementor widgets Free #

BlockWhat it does
Document LibrarySearchable, filterable list of documents as a table, grid or folders.
Document ListA short list: newest, recently updated, most downloaded or related.
Document DownloadOne document as a card or a button.
Document SearchA search box that sends visitors to your library page.
PDF ViewerA PDF from a document, the Media Library or a URL in the built-in viewer.
Save as PDF ButtonThe Post to PDF button, placed where you want it.

Blocks are in the Document Engine category of the block inserter. Elementor has four widgets with the same options: Document Library, Document List, Document Download and PDF Viewer.

Pro adds the My Documents, Required Reading, Submit Document and Subscribe to Documents blocks.

Accessible format requests Free #

Laws such as ADA Title II, the UK accessibility regulations and the European Accessibility Act expect many organisations to provide documents in an accessible format on request. Document Engine can collect those requests for you.

  1. Go to Documents → Settings → Documents and tick Format requests under Accessibility.
  2. Optionally enter an address in Send requests to (empty uses the site admin email).

Document pages then show "Need this document in another format?". Visitors choose a format (accessible PDF, Word, large print, plain text or web page, Braille, audio, or something else), leave their name and email, and the request is emailed to you.

Requests are listed under Documents → Reports → Format requests with a count of open ones. Reply to the notification email with the alternative version, then mark the request Done. Only editors and administrators can see requests.

The form has spam protection: a minimum time on the form, a hidden field, and limits per visitor (5 an hour, 10 a day), per document (3 a day per visitor) and per site (300 a day). Requests contain names and emails and are included in WordPress's personal data export and erase tools.

Pro can add Cloudflare Turnstile to this form. See Abuse protection.

Who can manage documents Free #

Documents have their own permissions, separate from posts. Go to Documents → Settings → Advanced → Permissions and choose roles for each level. Administrators always have full access.

SettingDefaultAllows
Manage all documentsAdministrator, EditorAdd, edit and delete any document, manage categories, see reports and requests.
Publish their own documentsAuthorAdd and publish documents, and edit only their own.
Draft their own documentsContributorAdd documents for review; someone else publishes them.

Settings and migration need the administrator's manage_options capability.

PDF viewer

The built-in PDF viewer Free #

The viewer is based on PDF.js and served from your own site: no Google viewer and no third-party requests. It is used on document pages, in the PDF Viewer block and [document_engine_viewer], and in preview popups. It loads only when it scrolls into view.

  • Page navigation, zoom (fit width, fit page, automatic, percentages), print, download and full screen.
  • Search inside the PDF (Ctrl/Cmd+F while the viewer has focus) with highlighted matches.
  • A sidebar with page thumbnails and the PDF's outline (bookmarks).
  • Clickable links inside PDFs, including links to other pages of the same PDF.
  • Selectable text.

PDFs linked from another website only display if that site allows it (CORS). Otherwise visitors see an "Open the PDF" link instead. Upload the file for reliable viewing.

Show a PDF with the PDF Viewer block Free #

  1. Add the PDF Viewer block.
  2. Under PDF source, choose Document from your library, a Media Library file, or a PDF URL.
  3. Optionally set the Height (for example 800px or 80vh), Initial zoom and Open at page, and show or hide the Toolbar, Download button, Print button and Full screen button. Use default follows the viewer settings.

The block supports wide and full-width alignment.

Link to a specific page of a PDF

Add #page= and the page number to a document page address, for example /documents/annual-report/#page=12, to open the PDF at that page. In a PDF Viewer block, set Open at page; in the shortcode, use page="12".

Viewer settings Free #

Go to Documents → Settings → PDF Viewer. Each PDF Viewer block can override these.

SettingDefaultEffect
Default height800pxAny CSS length, such as 80vh for 80% of the screen height.
Initial zoomFit widthFit width, Fit page, Automatic or 100%.
ToolbarAll onPage navigation and zoom; Download button; Print button; Full screen button; Search inside the document; Page thumbnails and outline sidebar.
Version 1 blocksOn for new sitesWhether PDF Viewer (classic) blocks use this viewer. Off shows those blocks with the Google Docs viewer, which loads the PDF from Google.

Pro adds a secure, view-only mode with a watermark on every page and reading analytics. See Secure viewer and stamped downloads.

Post to PDF

Add a Download PDF button to posts Free #

Post to PDF turns a post, page or other content into a PDF on your server. Nothing is ticked by default.

  1. Go to Documents → Settings → Post to PDF (section Button).
  2. Under Show on, tick the content types that should get the button.
  3. Set the Button text (default "Download PDF"), Placement (Above the content or Below the content, default above), Alignment (default right) and When clicked (Download the PDF, or Open the PDF in a new tab).
  4. Save, then click Preview PDF at the top of the screen to see the latest post as a PDF.

To place the button yourself, use the Save as PDF Button block or [document_engine_pdf_button] (attributes text and alignment). A post that contains the block can be exported even if its type is not ticked. The shortcode button only shows on single posts and pages, not on archives or the home page.

PDFs are made only for published, public posts; never for private or password-protected ones. Images from internal network addresses are left out.

PDF cache and generation limit

In Documents → Settings → Advanced → Performance:

  • PDF cache (on): generated PDFs are reused for visitors who are not logged in. A PDF is rebuilt when its post or the PDF settings change.
  • Generation limit (20 per minute): how many new PDFs one visitor can create per minute. 0 turns the limit off. Cached PDFs and logged-in users are never limited.

Header, footer and page layout Free #

Header & footer

In Documents → Settings → Post to PDF → Header & footer:

  • Header: a Logo (PNG or JPG, shown on the left), Show the post title and page numbers, and a Text size (empty uses the page text size).
  • Footer: Footer text such as your organisation name or a disclaimer (allowed HTML: a, br, em, strong, hr, p, h1 to h6), Show the post title and page numbers, and a text size.

Page & protection

Pages are A4. In Documents → Settings → Post to PDF → Page & protection:

SettingDefault
OrientationPortrait (or Landscape)
Text size12 pt (6 to 36)
Left margin / Right margin15 mm
Top margin / Bottom margin50 mm (leave room for the header and footer)
Header distance15 mm from the top of the page
ColumnsOff: when on, columns made with [document_engine_pdf_columns] fill one after another instead of being balanced

Under Protection, tick Protect PDFs to encrypt generated PDFs and choose what Readers may do: Copy text, Print, Print in high quality, Edit, Add comments, Fill in forms, Extract for accessibility, Rearrange pages. Anything not ticked is not allowed.

Style

In Documents → Settings → Post to PDF → Style, tick Theme styles to include your theme's stylesheet, and add Custom CSS that applies to every PDF (it wins over theme styles), for example h2 { color: #1d4ed8; }.

Pro adds a Watermark section with text and image watermarks. See Watermarks on Post to PDF.

Control the PDF content with shortcodes Free #

Use these shortcodes inside the post content. They only change the PDF; the web page is unaffected.

ShortcodeEffect
[document_engine_pdf_remove]…[/document_engine_pdf_remove]The enclosed content is shown on the page but left out of the PDF.
[document_engine_pdf_page_break]Starts a new page in the PDF.
[document_engine_pdf_columns]…[/document_engine_pdf_columns]Lays out the enclosed content in columns. Attributes: columns (default 2), equal_columns (balance the column heights, default off), gap (in mm, default 10).
[document_engine_pdf_column_break]Inside a columns block, starts the next column.
[document_engine_pdf_columns columns="2" gap="8"]First column text…[document_engine_pdf_column_break]Second column text…[/document_engine_pdf_columns]

Settings and migration

Settings: Documents tab Free #

Go to Documents → Settings → Documents.

SettingDefaultEffect
PagesOnEach document gets its own page. Off: library titles link straight to the file.
URL prefixdocumentsThe address of document pages (for example /documents/annual-report/). Categories and tags use /documents/category/… and /documents/tag/…. File links do not change.
PDF previewOnShows the viewer on PDF document pages.
Related documentsOffLists related documents (same category or tags) under each document page.
Site searchOnIncludes documents in WordPress search results.
Download buttonDownloads the fileOr opens the file in the browser (PDFs, images, text). Each document can override it.
Download counterOnCounts downloads. Search engines, link previews and repeated range requests are not counted.
Format requestsOffShows "Request an accessible version" on document pages. See Accessible format requests.
Send requests toSite admin emailWhere format requests are emailed.

Library section

Starting values for new Document Library blocks and the shortcode; each library can change them.

SettingDefault
LayoutTable
Documents per page20 (1 to 100)
View buttonOn
View opensThe document page (or A preview popup)

Settings: Advanced tab Free #

Go to Documents → Settings → Advanced.

  • Permissions: roles that manage all documents, publish their own or draft their own. See Who can manage documents.
  • Performance: PDF cache and Generation limit for Post to PDF. See PDF cache and generation limit.
  • Data: When deleting the plugin (off) also deletes all documents, categories and settings when you delete the plugin, and with Pro its logs and records. Uploaded files stay in the Media Library. Leave it off unless you are removing the plugin for good.

Migrate from another document plugin Free #

Documents → Tools → Migrate copies documents from Document Library (Barn2), Download Monitor and WordPress Download Manager: titles, descriptions, categories, tags, files, download counts, dates and passwords.

  1. Keep the old plugin active. Open Documents → Tools → Migrate and pick the source.
  2. Check the preview: how many items were Found, Already moved and To move, and any items that need attention (members-only or locked items).
  3. Optionally tick Skip members-only items, then click Review and migrate and let it finish. If it stops, run it again to continue where it stopped.
  4. Check a few documents and the pages that used the old shortcodes, then deactivate the old plugin.
  • The old plugin's data is only read, never changed. Running it again skips items already moved.
  • Files already in the Media Library are reused. Files kept elsewhere on the server are copied into the Media Library; links to other websites stay links.
  • After you deactivate the old plugin, its shortcodes keep working and show the moved documents, and its download links and document page addresses redirect to the new documents.
  • New documents start as drafts until their file is in place. Members-only items stay drafts, and items with a lock on the old plugin (paid, email or captcha) are kept as drafts without their file, so nothing private becomes public. Set who may open them, attach the file and publish.

With Pro, members-only files are copied straight into protected storage and their access rule is applied.

Pro features

Install Pro and activate your licence Pro #

  1. Keep the free Document Engine plugin active; Pro builds on it.
  2. Either go to Documents → Free vs Pro, enter your licence key under "Already bought Pro?" and click Install Pro, or download the Pro ZIP from your account and upload it under Plugins → Add New Plugin → Upload Plugin.
  3. Go to Documents → Settings → License, enter the License key and click Activate license. The screen shows the status and renewal date.

An active licence gives one-click updates from the Plugins screen and support. Every Pro feature keeps working without it, including after a licence expires.

Deactivating Pro returns the site to the free features. Pro data (access rules, logs, acknowledgements) stays in the database unless you delete the plugin with When deleting the plugin switched on.

Access control Pro #

Decide who can open each document. Open a document and use Who can open it in the Access & security panel:

OptionWho can open it
Same as its categoriesThe rules of its categories (public if none). This is the default.
EveryoneAnyone, whatever its categories say.
Logged-in usersAnyone signed in.
Users with these rolesSigned-in users with a ticked role.
Only these peopleThe users you name.

To restrict a whole category, go to Documents → Categories, edit the category and set Who can open these documents. Sub-categories follow their parent. A document that follows its categories must pass the rule of every restricted category it is in. People who can edit a document can always open it.

  • In Documents → Settings → Access & Pro → Access, Restricted documents in lists either shows them with a lock icon (default) or hides them from people who cannot open them.
  • Logged-out visitors are asked to log in; logged-in people without access see a clear message.
  • Access is checked on the server for every download, preview, REST request and search result. Restricted documents are left out of site search, feeds and file-content search for people who cannot open them, and their content and excerpt are blanked.
  • The documents list gets an Access column and a filter by access.

Protected storage for private files Pro #

Protected storage moves a document's file (and its image sizes and earlier versions) out of the public uploads folder into a private folder with an unguessable name, so the file address alone cannot be used to download it. The file is then only served through the document file server, after the access check.

  • Protect files automatically (Documents → Settings → Access & Pro → Access, on by default) protects the files of every restricted, secure-viewer or email-gated document, and moves them back when the document becomes public again.
  • For any other document, switch on Private file storage in its Access & security panel.
  • A file that is also embedded in other posts or pages, or used as a featured image, is left in the public folder so those pages do not break. The documents list marks it; upload a separate copy to protect it.

Check that the folder really is private

Go to Tools → Site Health. The test Document Engine protected storage tries to fetch a test file from the private folder. On Apache it passes straight away. On nginx (which ignores .htaccess) it fails until you add this rule to the site's nginx configuration and reload nginx:

location ^~ /wp-content/uploads/document-engine-private- { deny all; return 403; }

Until the Site Health test passes, anyone who learns a protected file's exact address could download it. If you cannot edit the server configuration, ask your host to add the rule.

Secure viewer and stamped downloads Pro #

Secure mode shows a PDF in the viewer only: no download or print buttons, no text selection or right-click, and each page carries a watermark with the reader's details. Downloads of secure documents are blocked, and visitors who try are sent to the document page with the viewer.

  • Switch it on per document with Secure viewer in the Access & security panel, or set Use secure mode for in Documents → Settings → Access & Pro → Secure viewer: only documents where you switch it on (default), all restricted documents, or all documents.
  • Watermark text (default {name} · {email} · {date}). Placeholders: {name} {email} {username} {ip} {date} {time} {site}. Empty means no watermark.
  • Downloads of secure documents: Block downloads (on). People who can edit the document can still download it.
  • Stamp downloaded PDFs (off): when any PDF is downloaded, the copy the visitor receives has the watermark on every page. If a PDF cannot be stamped, the original is sent and the activity log records "Stamp failed".

The viewer only ever receives the watermarked copy of a secure PDF. Only PDFs can be shown in secure mode; other secure files cannot be viewed or downloaded. A watermark discourages sharing and identifies leaks, but no viewer can stop someone photographing a screen.

Email gate and leads Pro #

Ask for a name and email (and optionally an organisation) before a download, with your consent text. Logged-in users skip the form, and visitors who filled it in are remembered for a number of days.

  1. Go to Documents → Settings → Access & Pro → Email gate. Set Default to Off (switch on per document) or On for all documents.
  2. Adjust the Organization field, Heading (default "Get this document"), Consent text and Remember visitors for (30 days).
  3. Optionally set a Webhook URL (each new lead is sent as JSON to Zapier, Make, n8n or your CRM), Keep leads for (0 keeps them until you delete them) and Email me new leads.
  4. To gate a single document, set Email gate to On in its Access & security panel.

Leads are listed under Documents → Reports → Leads with an Export CSV button. With Protect files automatically on, gated files are moved to protected storage, so the form cannot be bypassed with the file address.

Activity log and reading analytics Pro #

Documents → Reports → Activity shows views and downloads per day for the last 30 days, top documents, and an Audit log of every view, download, blocked request, share-link event, lead and file replacement, filterable by event, person and date, with Export CSV.

  • Reading analytics: for PDFs read in the viewer, the time spent on each page and how far people read. Filter the Activity page to one document (or use See who viewed and downloaded it in the document's Access & security panel) to see it.
  • Documents → Reports → Searches: what visitors type into library search boxes, the top searches and the searches that found nothing. Searches by editors are not counted.
  • The documents list shows views in the last 30 days next to downloads.

Settings are in Documents → Settings → Access & Pro → Activity log: Log activity, Reading time, Library searches and Visitors who are not logged in (all on), and Keep entries for (365 days; 0 keeps them forever).

No IP addresses are stored in these logs. Visitors who are not logged in are identified by an anonymous hash that changes every day.

Versions, review and expiry dates Pro #

When you replace a document's file, the previous file is kept in its version history and the links do not change.

  • Replace the file in the Document file panel, or use the Upload new version row action in the documents list, or drop a file onto a row of the list.
  • Type a Note for the next file version in the Access & security panel; it is saved with the current file when you replace it.
  • The Versions box in the editor lists earlier files. Download one, or click Restore to make it the current file (the current file is kept as a version).

Up to 50 versions are kept per document. Earlier versions follow the document's protected storage.

Review and expiry dates

In the Access & security panel, under Dates:

  • Review by: the date the document should be checked.
  • Unpublish on: on this date the document is switched to draft automatically.

With Reminder emails on (Documents → Settings → Access & Pro → Review & submissions, default on), a daily digest lists documents due for review and documents that expired. Send reminders to takes comma-separated addresses; empty sends to each document's author and the site admin. The documents list shows review and expiry dates.

Read and confirm (acknowledgements) Pro #

Ask people to confirm they have read a document, such as a policy, and keep the evidence.

  1. Open the document and go to the Read & confirm panel. Switch on People must confirm they have read it.
  2. Tick the Roles asked to confirm. Only people who can also open the document are asked. If the document is restricted to roles or named people, those people are asked.
  3. Set Days to confirm (counted from publishing; 0 for no deadline), optionally change the Statement people agree to, and switch on Ask for a typed signature if people should type their name.
  4. Add the Required Reading block to a staff page so each person sees what they still need to confirm.

Documents → Reports → Acknowledgements shows each document's progress and who has and has not confirmed, sends reminders, and exports the evidence with Export CSV (name, time, statement, signature, round and a fingerprint of the file).

After an important change, open the document in the report and click Start round to ask everyone again. Earlier confirmations stay on record and in the export.

Settings in Documents → Settings → Access & Pro → Acknowledgements: the Default statement and Reminder emails (on: 3 days before the deadline and once it has passed).

Webhooks, Slack or Teams, and email subscriptions Pro #

Settings are in Documents → Settings → Access & Pro → Notifications.

Webhooks

Add up to 10 Webhook URLs (one per line) and choose which events to Send:

EventWhen
document.publishedA document is published.
document.version_addedA document gets a new file version.
document.acknowledgedSomeone confirms they read a document.
document.submittedSomeone submits a document for review.
lead.createdSomeone fills in the email gate.

Each request is a JSON body with event, site, created_at and a document object (id, title, url, status, type, size, categories). It carries the headers X-DocumentEngine-Event, X-DocumentEngine-Timestamp and X-DocumentEngine-Signature. The signature is sha256= followed by the HMAC-SHA256 of the timestamp, a full stop and the raw body, keyed with the Signing secret (created automatically on first use). Reject requests whose signature does not match or whose timestamp is old.

Slack or Microsoft Teams

Paste an Incoming webhook URL and choose what to Post about (published, new version, submitted). Documents only some people can open are never announced.

Email subscriptions

Tick Subscriptions, then add the Subscribe to Documents block (or [document_engine_subscribe]) to a page. Logged-in people pick the categories they follow and get one email when a document is published there, with a one-click unsubscribe link. They are only told about documents they can open.

If webhooks do not arrive

Check the event is ticked under Send these events. Webhooks are only sent to public addresses; a URL on the same server or on a private network (such as a local test machine) is refused. When verifying the signature, sign the timestamp header, a full stop and the raw body, not the body alone.

Front-end submissions Pro #

Let logged-in users upload documents from the front end.

  1. In Documents → Settings → Access & Pro → Review & submissions, choose Who can submit (default Administrator, Editor, Author, Contributor), whether New submissions are Pending review (default) or Published immediately, the Allowed file types (default pdf, doc, docx, xls, xlsx, ppt, pptx, odt, ods, txt, csv, jpg, jpeg, png) and the Maximum file size (20 MB).
  2. Add the Submit Document block (or [document_engine_submit]) to a page. Optionally set Put submissions in a fixed category, or let the user choose.

Visitors who are not logged in are asked to log in. New pending submissions can trigger the document.submitted webhook and a Slack or Teams message.

Bulk and CSV import Pro #

Go to Documents → Tools → Import.

Upload files

Choose a Category and Status (Published or Draft), then drop files onto the box or click it to upload or pick from the Media Library. Each file becomes a document named after the file.

Import a spreadsheet (CSV)

Click Download template for a ready-made file. One row per document:

ColumnContent
idEmpty creates a document; a document ID updates that document.
titleThe document title (required for new documents).
file_url or attachment_idA file address, or the ID of a Media Library file (required for new documents).
categoryCategory names, separated by commas or |. Missing categories are created if you may manage categories.
tagsTag names, separated by commas.
descriptionThe document description.
statuspublish, draft, pending or private. Default publish.
cf:keyA custom field value. Write - to clear it.

Files at file_url are copied into the Media Library, unless you tick Link to file_url instead of copying the file into the Media Library under Remote files. If a file cannot be downloaded, the document links to it instead. Rows that need attention are listed after the import.

The same import is available as wp dengine import. See WP-CLI.

Custom fields Pro #

Add your own details to documents, such as a reference number, department or review date. Go to Documents → Settings → Fields and click Add field.

  • Name, Key (lowercase letters, numbers and underscores; made from the name if empty; cannot change once saved), Type and Help text.
  • Types: Text, Long text, Number, Date, Choice list (one choice per line), Yes / no, Link, Email.
  • Use it for: Column (libraries and the documents list), Filter (text, number, choice list and yes/no fields), Sort (text, number and date fields), Search (text, choice, link and email fields) and Document page (shown in the details on the document's page).
  • Use Move up and Move down to set the order in the sidebar and on document pages.

Fill the fields in the Details panel of the document editor, or import them from CSV with cf:key columns. In a Document Library block, pick field columns under Columns and field filters under Search and filters. In the shortcode, prefix the key with cf_, for example columns="title,cf_department,actions" filters="category,cf_department".

Using Advanced Custom Fields? The Fields tab lists ACF field groups shown on documents under Fields from Advanced Custom Fields. Add a field to use it in libraries, filters and search; you keep editing it in the ACF box.

My Documents, Required Reading and ZIP downloads Pro #

  • My Documents block (or [document_engine_my_documents]): a client or staff area listing the documents shared with the logged-in person (named on the document or its category), with documents new since their last visit marked. Also list documents shared with their role is on by default (shortcode include_roles="no" turns it off).
  • Required Reading block (or [document_engine_required_reading]): each person's documents to confirm, overdue first, with due dates. Also list documents already confirmed is on by default (shortcode show_done="no").
  • ZIP download: add the Select (ZIP download) column to a table library. Visitors tick documents and click Download selected (ZIP). Only plain downloads are included: gated, view-only and stamped documents, and files linked from other sites, keep their own flow. Up to 100 files and 250 MB per ZIP; needs the PHP zip extension.

Pages with the personal blocks tell caching plugins not to cache them.

Handbook PDFs Pro #

Combine many posts or pages into one PDF with a cover, a clickable table of contents and bookmarks, in your Post to PDF logo, styles and watermarks.

  1. Go to Documents → Tools → Handbook PDF.
  2. Under Cover, set the Title and Subtitle.
  3. Under Content, choose the Content type and, optionally, a Category slug, or list exact post IDs in Or these IDs (in that order). Choose the Order.
  4. Click Create PDF to download it, or Get shortcode for a page and paste Your shortcode into any page to give visitors a download button.

Visitors always get the latest version; it is cached until one of the posts changes. Only published posts without a password are included, and restricted documents are left out for people who cannot open them.

AttributeDefaultMeaning
post_typepostContent type to include.
categoryTerm slug to include.
taxonomyTaxonomy of that term (defaults to categories for posts).
idsExact post IDs, comma-separated, in that order.
title, subtitleSite name, emptyCover page text.
orderby, ordermenu_order title, ASCSort order.
limit100Maximum posts (up to 300).
textDownload handbook (PDF)Button text.

Abuse protection Pro #

In Documents → Settings → Access & Pro → Abuse protection:

  • Documents per person per day (0 = no limit): how many different documents one person can download or open in the viewer each day, including files in ZIP downloads. Opening the same document again does not count. Logged-in people are counted by account, visitors by their network address. Editors are never limited.
  • Cloudflare Turnstile: tick Turnstile and enter the Site key and Secret key (free from the Cloudflare dashboard) to protect the email gate, the accessible format request form and the submission form.

Watermarks on Post to PDF Pro #

Pro adds a Watermark section to Documents → Settings → Post to PDF.

  • Text watermark, printed diagonally across every page: Text (placeholders {name} {email} {username} {ip} {date} {time} {site} {title}), Opacity (0 to 1, default 0.2) and Angle (empty uses 45°).
  • Image watermark, behind the content of every page: Image (PNG with transparency works best), Opacity (default 0.2), Width and Height (empty uses the image size and keeps proportions), From left and From top (empty centres the image).

A text watermark with personal placeholders ({name}, {email}, {username}, {ip}, {time}) is different for each reader, so those PDFs are not cached.

Privacy and security

Data the plugin stores Free #

DataWhat is storedEdition
Documents, categories, tagsWordPress posts, terms and post meta (file, type, size, download count).Free
Format requestsName, email, requested format, message. Visible to editors and administrators.Free
Activity log, reading sessions, searchesDocument, event, time, user ID for logged-in users; a daily-changing anonymous hash for visitors. No IP addresses. Deleted after the retention period.Pro
LeadsName, email, organisation, document, time. Deleted after the lead retention period if set.Pro
AcknowledgementsUser, name, time, statement, typed signature, file fingerprint, IP address and browser, kept as evidence.Pro

Format requests, and with Pro leads, activity, searches, reading sessions and acknowledgements, are included in Tools → Export Personal Data and Tools → Erase Personal Data. Erasing keeps acknowledgements as compliance records but removes their IP address and browser details. Pro adds suggested text to your privacy policy guide.

External services Free #

The free plugin does not contact external services on its own. The viewer, PDF generation and QR codes run on your site. Exceptions you control:

  • PDF Viewer (classic) blocks use Google's document viewer when Version 1 blocks is off in Documents → Settings → PDF Viewer.
  • Documents that link to files on other sites load them from those sites.
  • Pro: the licence server (activation and updates), your webhook and Slack or Teams URLs, and Cloudflare Turnstile when switched on.

How access is enforced Free #

  • Every download and view goes through the document file server, which checks the document is published (or that the person may read the draft or private document) and, with Pro, that the person may open it.
  • Files of drafts, private and password-protected documents are always streamed through PHP, so their raw address is never handed out.
  • Admin actions check both a permission and a security token (nonce).
  • With Pro, access is checked on the server for every download, preview, REST request, search result and ability; hiding a button is never the only protection. Restricted files live in protected storage, which on nginx needs a server rule (see Protected storage).
  • Webhooks are only sent to public addresses, never to the server itself or private networks.

Developers

Shortcodes Free #

[document_engine_library]

The Document Library. Boolean attributes accept yes/no, true/false or 1/0.

AttributeDefaultValues
iddlLibrary ID, used as the prefix of its address parameters (dl_s, dl_cat…). Give each library on a page its own.
layoutSetting (table)table, grid, folders
categories, tagsallComma-separated slugs.
include, excludeComma-separated document IDs.
file_typesallpdf, word, sheet, slides, image, audio, video, archive, other
per_pageSetting (20)1 to 100
orderby, orderdate, descdate, title, modified, downloads, menu_order, rand; asc or desc
columnstitle,category,type,size,date,actionsthumbnail, title, excerpt, category, tag, type, size, date, modified, author, downloads, actions (Pro: select, cf_key)
grid_columns31 to 6
searchyesShow the search box.
filterscategory,typecategory, tag, type, year, author, sort (Pro: cf_key)
multi_filtersnoCheckboxes instead of dropdowns.
show_thumbnails, show_excerptyesCard details.
link_todocumentdocument, file, none
paginationyes
folder_limit, open_folders50, noDocuments per folder (1 to 100); expand folders.
classExtra CSS classes.
[document_engine_library layout="grid" categories="policies,forms" filters="tag,year,sort" multi_filters="yes"]

Other shortcodes

ShortcodeAttributes
[document_engine_document]id, style (card or button), label, show_meta (yes)
[document_engine_documents]mode (recent, updated, popular, related), count (5, up to 20), category (comma-separated slugs), title, show_meta (yes), document (ID for related)
[document_engine_search]page (ID of the library page, required), placeholder, button
[document_engine_viewer]id (document), file (Media Library ID) or url; height, width, page, zoom (page-width, page-fit, auto or a percentage), toolbar, download, print, fullscreen (yes/no; empty uses the settings)
[document_engine_pdf_button]text, alignment (left, center, right)
PDF content shortcodesSee Control the PDF content with shortcodes.

Pro shortcodes and blocks Pro #

ShortcodeBlockAttributes
[document_engine_my_documents]My Documentsinclude_roles (yes)
[document_engine_required_reading]Required Readingshow_done (yes)
[document_engine_subscribe]Subscribe to Documentsnone
[document_engine_submit]Submit Documentcategory (slug), show_category (yes)
[document_engine_handbook]noneSee Handbook PDFs.

Template overrides Free #

Copy a file from the plugin's templates/ folder into a document_engine/ folder in your theme (or child theme), keeping the sub-folder, then edit the copy. For example templates/document/single.php becomes your-theme/document_engine/document/single.php.

Available templates: document/single.php, document/card.php, document/access.php, library/table.php, library/grid.php, library/folder-list.php, library/empty.php, viewer/viewer.php, notice-page.php, pdf-button.php, pdf-header.php, pdf-footer.php, pdf-index.php, post-types/pdf-post.php and post-types/pdf-attachment.php.

Change the theme folder name with the document_engine_template_path filter.

Hooks Free #

HookTypeUse
document_engine_can_access_documentFilterMay this user view or download this document? Arguments: allowed, document, user ID, context (download, view or list). Pro adds its rules here.
document_engine_before_serve_documentActionRuns before a file is sent (document, context). Exit to take over.
document_engine_document_eventActionA view, download, denial or other event on a document.
document_engine_download_filenameFilterThe download file name.
document_engine_save_documentActionAfter a document is saved.
document_engine_library_query_argsFilterThe WP_Query arguments of a library.
document_engine_library_defaults, document_engine_library_settingsFilterDefault and final library settings.
document_engine_library_columns, document_engine_library_cellFilterAdd library columns and their cell markup.
document_engine_library_filter_keys, document_engine_library_controls, document_engine_library_stateFilter / ActionAdd library filters.
document_engine_library_sort_options, document_engine_list_modesFilterSort options of libraries; modes of document lists.
document_engine_library_searchedActionA visitor searched a library.
document_engine_viewer_configFilterThe viewer settings for one PDF.
document_engine_single_after_headActionBelow the summary card on document pages.
document_engine_accessible_formatsFilterFormats offered on the format request form.
document_engine_accessible_format_requestedActionA format request was received.
document_engine_pdf_formatFilterPost to PDF paper size (default A4).
document_engine_pdf_config, document_engine_pdf_mpdf_instanceFiltermPDF configuration and instance for Post to PDF.
document_engine_pdf_filenameFilterFile name of generated PDFs.
document_engine_pdf_can_generateFilterWhether a PDF may be generated for a post.
document_engine_before_generate_pdfActionBefore a PDF is generated.
document_engine_menu_groups, document_engine_menu_ranksFilterArrange the Documents menu.
document_engine_register_abilities, document_engine_ability_documentAction / FilterAdd abilities; change the document data they return.

Pro hooks Pro #

HookTypeUse
document_engine_pro_access_rulesFilterThe access rules that apply to a document.
document_engine_pro_attachment_used_elsewhereFilterWhether a file is used outside its document (then it is not moved to protected storage).
document_engine_pro_file_protected, document_engine_pro_file_unprotectedActionA file moved into or out of protected storage.
document_engine_pro_placeholdersFilterWatermark placeholder values.
document_engine_pro_notify_events, document_engine_pro_notify_payloadFilterWebhook events and JSON body.
document_engine_pro_lead_captured, document_engine_pro_lead_payloadAction / FilterA lead was captured; the lead webhook body.
document_engine_pro_acknowledgedActionSomeone confirmed a document.
document_engine_pro_document_submittedActionA front-end submission was saved.
document_engine_pro_share_openedActionA named share link was opened.
document_engine_pro_import_rowActionAfter a CSV row is saved.
document_engine_pro_extract_textFilterExtract text from file types Pro does not read itself.
document_engine_pro_index_max_bytesFilterLargest file indexed (default 30 MB).
document_engine_pro_search_file_contentsFilterSwitch file-content search off for a query.
document_engine_pro_max_versionsFilterVersions kept per document (default 50).
document_engine_pro_zip_max_bytesFilterLargest ZIP download (default 250 MB).
document_engine_pro_handbook_configFiltermPDF configuration for handbook PDFs.

REST routes and abilities Free #

RoutePurpose
GET /wp-json/document-engine/v1/libraryRendered library results (used by the library script).
GET /wp-json/document-engine/v1/preview/<id>Preview popup content; 403 if the visitor may not open the document.
GET /wp-json/document-engine/v1/documentsDocument search for editor pickers (needs permission to edit documents).
/wp-json/wp/v2/dengine_documentStandard WordPress REST endpoint for documents.

Pro adds /wp-json/document-engine-pro/v1/documents/<id>/share (GET lists, POST creates, DELETE revokes share links; needs permission to edit the document) and /wp-json/document-engine-pro/v1/read (reading analytics from the viewer).

Abilities for AI agents

On WordPress 6.9 and newer, the plugin registers read-only abilities with the WordPress Abilities API, so AI assistants connected to your site (for example through the MCP adapter) can use them:

  • document-engine/search-documents and document-engine/get-document (free).
  • document-engine/get-document-text (the indexed text of a document) and document-engine/list-due-for-review (Pro).

They only ever return documents the signed-in user may open.

WP-CLI Pro #

Pro adds the wp dengine command.

CommandWhat it does
wp dengine list [--category=<slug>] [--format=table|csv|json|ids]Lists documents.
wp dengine import <file.csv> [--link-only]Imports documents from a CSV file (same columns as the import screen). --link-only links to file_url instead of downloading it.
wp dengine stats [--days=30] [--document=<id>]Shows activity totals.
wp dengine reindex [<id>...]Rebuilds the file-content search index (all documents by default).
wp dengine protectMoves document files into or out of protected storage to match their access settings.
wp dengine share <id> [--days=<days>]Creates a share link.

Troubleshooting and FAQ

Document pages show "Page not found" Free #

Go to Settings → Permalinks and click Save Changes to refresh the site's addresses. Also check that no page or other content type uses the same address as the URL prefix in Documents → Settings → Documents.

Someone cannot see the Documents menu or a screen Free #

Check their role in Documents → Settings → Advanced → Permissions. Reports and Tools only appear for roles allowed to use them, and Settings and Migrate need an administrator. Remember that screens are grouped: Categories holds Tags, Reports holds Format requests (and with Pro Activity, Searches, Leads and Acknowledgements), and Tools holds Migrate (and with Pro Import and Handbook PDF).

The PDF viewer is blank or shows an error Free #

  • External PDFs: the other site must allow cross-site loading (CORS). Upload the file instead.
  • Mixed content: a site on https cannot load a PDF from an http address.
  • Optimisation plugins that combine, defer or delay JavaScript can break the viewer. Exclude the Document Engine viewer script from those optimisations.
  • Secure documents (Pro) that show "It can't be shown right now": the PDF could not be watermarked (some compressed or encrypted PDFs). Save the PDF again from a PDF editor and replace the file.

Download counts do not go up Free #

Downloads are counted when the file is requested through the document link. Check that Download counter is on in Documents → Settings → Documents, and that your links point to the document, not directly to the file in /wp-content/uploads/. Search engines, link previews and repeated range requests are not counted, and views in the viewer are not downloads.

Post to PDF fails or looks wrong Free #

  • No button: tick the content type under Show on in Documents → Settings → Post to PDF. PDFs are never made for private or password-protected posts.
  • Blank page or error: raise PHP's memory limit (256 MB recommended), and check Tools → Site Health for missing mbstring or gd extensions or an unwritable folder.
  • "Too many PDF requests": the visitor reached the Generation limit in Documents → Settings → Advanced. Wait a minute or raise the limit.
  • Old content in the PDF: cached PDFs are rebuilt when the post or PDF settings change. Save the post again if it depends on content from elsewhere.
  • Styling: switch Theme styles off and add your own rules under Custom CSS in the Style section.

Emails do not arrive Free #

Format requests, reminders and notifications are sent with WordPress's own email function. If other WordPress emails (such as password resets) also fail, install an SMTP plugin to send through a real mail service.

Protected storage problems Pro #

Your web server ignores .htaccess files, which is common on nginx. Add this rule to the site's nginx configuration, reload nginx, then run Site Health again. If you cannot edit the configuration, ask your host.

location ^~ /wp-content/uploads/document-engine-private- { deny all; return 403; }

Until the test passes, anyone who learns a protected file's exact address could download it.

A restricted document's file was not moved to protected storage

A file that is also embedded in other posts or pages, or used as a featured image, stays in the public uploads folder so those pages keep working; the documents list shows a warning in the Access column. Upload a separate copy of the file to the document. You can also run wp dengine protect to bring every file in line with its access settings.

Members see the wrong list, or a page cache shows private content Pro #

Pages with personal lists (My Documents, Required Reading) tell caching plugins not to cache them. For library pages that look different to members, exclude logged-in users from your page cache (most caching plugins do this by default).

The Pro licence or updates do not work Pro #

Check the key in Documents → Settings → License; it shows the status and renewal date. If it says the key "has reached its site limit", deactivate it on another site or upgrade the licence. Your server must be able to reach the store over https. Pro keeps working without an active licence; only updates and support need one.

Frequently asked questions Free #

Is the free version limited in time or number of documents?

No. There is no time limit, no document limit and no branding on your library.

Does it work with my theme and page builder?

Libraries use your theme's fonts and colours and adapt to the space they get. Blocks work in the block editor and site editor; Elementor has its own widgets; shortcodes work anywhere else. Templates can be overridden in your theme (see Template overrides).

Can I keep documents private with the free plugin?

You can keep documents as drafts, private or password-protected, but the file of a published document stays in the public uploads folder. Member-only access, protected storage and share links are Pro features.

Does the PDF viewer use Google?

No. The viewer runs on your own site and sends nothing to Google or anyone else, so it also works for files on an intranet or staging site.

What happens when I uninstall?

By default nothing is deleted, so you can reinstall without losing documents. To remove everything, turn on When deleting the plugin in Documents → Settings → Advanced before deleting the plugin. Uploaded files in the Media Library are never deleted.

What happens if my Pro licence expires?

Pro keeps working, including access rules and protected files. You stop receiving updates and support until you renew.

Does it support multisite?

The plugin works per site: activate it on each site that needs it. Every site keeps its own documents and settings.

Multilingual sites

Document Engine ships a WPML configuration: documents, categories and tags are translatable, and each translation starts with the original file but can be given its own file, so each language can have a different PDF. The Post to PDF button text and footer text can be translated as strings. Download counts are kept per translation.