{"id":369342,"date":"2026-09-17T18:25:18","date_gmt":"2026-09-17T18:25:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/pdf-document-versions\/"},"modified":"2026-09-17T18:24:55","modified_gmt":"2026-09-17T18:24:55","slug":"versilink","status":"publish","type":"plugin","link":"https:\/\/dv.wordpress.org\/plugins\/versilink\/","author":23566752,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.0","stable_tag":"0.1.0","tested":"7.1.1","requires":"5.0","requires_php":"7.2","requires_plugins":null,"header_name":"Versilink - Replace PDFs Without Breaking Links","header_author":"","header_description":"Turn a Media Library file into a Document with a permanent link, version history and rollback, so links you already shared keep working after you replace the file.","assets_banners_color":"a2b0d5","last_updated":"2026-09-17 18:24:55","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":51,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"mykytadudariev","date":"2026-09-17 18:24:55","revision":3700794}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3700794,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3700794,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3700794,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3700794,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3700794,"resolution":"1","location":"assets","locale":"","width":1544,"height":965},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3700794,"resolution":"2","location":"assets","locale":"","width":1544,"height":1076},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3700794,"resolution":"3","location":"assets","locale":"","width":1544,"height":965},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3700794,"resolution":"4","location":"assets","locale":"","width":1544,"height":965}},"screenshots":{"1":"Creating a Document from the attachment edit screen.","2":"Version history with notes, downloads and restore.","3":"The Documents list with each Document's permanent link.","4":"The permanent link prefix setting."}},"plugin_section":[],"plugin_tags":[9054,233,1764,939,10009],"plugin_category":[50,59],"plugin_contributors":[281342],"plugin_business_model":[],"class_list":["post-369342","plugin","type-plugin","status-publish","hentry","plugin_tags-documents","plugin_tags-media-library","plugin_tags-pdf","plugin_tags-permalinks","plugin_tags-versioning","plugin_category-media","plugin_category-utilities-and-tools","plugin_contributors-mykytadudariev","plugin_committers-mykytadudariev"],"banners":{"banner":"https:\/\/ps.w.org\/versilink\/assets\/banner-772x250.png?rev=3700794","banner_2x":"https:\/\/ps.w.org\/versilink\/assets\/banner-1544x500.png?rev=3700794","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/versilink\/assets\/icon-128x128.png?rev=3700794","icon_2x":"https:\/\/ps.w.org\/versilink\/assets\/icon-256x256.png?rev=3700794","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/versilink\/assets\/screenshot-1.png?rev=3700794","caption":"Creating a Document from the attachment edit screen."},{"src":"https:\/\/ps.w.org\/versilink\/assets\/screenshot-2.png?rev=3700794","caption":"Version history with notes, downloads and restore."},{"src":"https:\/\/ps.w.org\/versilink\/assets\/screenshot-3.png?rev=3700794","caption":"The Documents list with each Document's permanent link."},{"src":"https:\/\/ps.w.org\/versilink\/assets\/screenshot-4.png?rev=3700794","caption":"The permanent link prefix setting."}],"raw_content":"<!--section=description-->\n<p>When you update a price list, catalog or PDF guide, the links you already sent by email, in ads or on social media still point to the old copy. This plugin turns an existing Media Library file into a <strong>Document<\/strong>. Each new version you upload replaces the file at its current address, so links you already shared serve the new content.<\/p>\n\n<p>It is aimed at PDF price lists and guides, but works with any file type WordPress lets you upload, including DOCX and XLSX.<\/p>\n\n<p><strong>Features<\/strong><\/p>\n\n<ul>\n<li>Create a Document from any Media Library file.<\/li>\n<li>Replace the file in place: its existing address serves each new version.<\/li>\n<li>Version history with an optional note per version. Users who manage the Document can download previous versions and restore any of them.<\/li>\n<li>Previous versions are kept in a separate uploads folder under random file names and do not appear in the Media Library.<\/li>\n<li>A short permanent link (<code>\/docs\/your-document<\/code>, prefix configurable) that always points to the current file. The plugin warns when the prefix clashes with an existing page, post type or taxonomy.<\/li>\n<li>Media Library files that are Documents are marked, and other files get a \"Create Document\" action.<\/li>\n<\/ul>\n\n<p><strong>A note on caching<\/strong><\/p>\n\n<p>The permanent link is sent with headers that forbid caching by browsers, but if the site uses a page cache or a CDN, the file's actual address may still be served from cache until purged. After uploading a new version, purge the relevant cache so visitors see it immediately.<\/p>\n\n<p><strong>A note on nginx<\/strong><\/p>\n\n<p>Previous-version files are stored under a folder with random, non-guessable names, which is the primary protection against direct access. On servers running Apache, an <code>.htaccess<\/code> file inside that folder also denies all direct requests. nginx does not read <code>.htaccess<\/code> files, so on nginx that extra layer is not present; the random file names remain the only protection.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/<\/code>, or install it through the Plugins screen.<\/li>\n<li>Activate the plugin.<\/li>\n<li>In the Media Library, use the \"Create Document\" action on a file, or open the new \"Documents\" screen to manage Documents and their permanent link prefix.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20happens%20to%20the%20file%27s%20original%20media%20library%20address%3F\"><h3>What happens to the file's original Media Library address?<\/h3><\/dt>\n<dd><p>It keeps working. Uploading a new version writes the new content to the same physical file, so any link to the original address (and the Document's own permanent link) serves the current version.<\/p><\/dd>\n<dt id=\"what%20if%20i%20upload%20a%20file%20of%20a%20different%20type%2C%20like%20a%20docx%20replacing%20a%20pdf%3F\"><h3>What if I upload a file of a different type, like a DOCX replacing a PDF?<\/h3><\/dt>\n<dd><p>The Document's current file moves to a new address in the same folder, and the old address is frozen: it keeps serving the last file of the old type instead of updating further. The plugin shows a warning when this happens and lists the frozen address on the Document.<\/p><\/dd>\n<dt id=\"is%20there%20a%20file%20size%20limit%3F\"><h3>Is there a file size limit?<\/h3><\/dt>\n<dd><p>New versions use the same upload limit as the Media Library, which is set by your host. The limit is shown next to the upload field.<\/p><\/dd>\n<dt id=\"does%20deleting%20a%20document%20delete%20the%20file%3F\"><h3>Does deleting a Document delete the file?<\/h3><\/dt>\n<dd><p>No. Deleting a Document on its screen removes its version history and stored previous versions, but the Media Library file stays untouched. Documents cannot be moved to Trash, because that would break their permanent link. Permanently deleting the Media Library file, on the other hand, deletes the Document and its history too; the plugin warns about this before you confirm.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20uninstall%20the%20plugin%3F\"><h3>What happens to my data if I uninstall the plugin?<\/h3><\/dt>\n<dd><p>Uninstalling removes the plugin's Documents, version history, settings and private storage folder. Media Library files are never touched.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Turn a PDF (or any Media Library file) into a Document with one permanent link that always serves the current version.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/369342","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=369342"}],"author":[{"embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mykytadudariev"}],"wp:attachment":[{"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=369342"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=369342"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=369342"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=369342"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=369342"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=369342"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}