{"id":288086,"date":"2026-03-26T20:11:30","date_gmt":"2026-03-26T20:11:30","guid":{"rendered":"https:\/\/en-gb.wordpress.org\/plugins\/kitgenix-document-manager\/"},"modified":"2026-03-26T20:11:39","modified_gmt":"2026-03-26T20:11:39","slug":"kitgenix-document-manager","status":"publish","type":"plugin","link":"https:\/\/ja.wordpress.org\/plugins\/kitgenix-document-manager\/","author":23310025,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.0","stable_tag":"1.0.0","tested":"7.0","requires":"6.0","requires_php":"8.1","requires_plugins":null,"header_name":"Kitgenix Document Manager","header_author":"Kitgenix","header_description":"Manage document downloads with stable links, version history, and private file access.","assets_banners_color":"b9aad7","last_updated":"2026-03-26 20:11:39","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/donate.stripe.com\/9B65kDgG3fTQ2Kzcmwf7i00","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/kitgenix-document-manager\/","header_author_uri":"https:\/\/kitgenix.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":47,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"kitgenix","date":"2026-03-26 20:11:39"}},"upgrade_notice":{"1.0.0":"<p>Maintenance and compatibility update. Recommended for all sites.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3492128,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3492128,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3492128,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3492128,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[9054,5440,8848,22336,258727],"plugin_category":[],"plugin_contributors":[246171],"plugin_business_model":[],"class_list":["post-288086","plugin","type-plugin","status-publish","hentry","plugin_tags-documents","plugin_tags-downloads","plugin_tags-file-manager","plugin_tags-private-files","plugin_tags-stable-links","plugin_contributors-kitgenix","plugin_committers-kitgenix"],"banners":{"banner":"https:\/\/ps.w.org\/kitgenix-document-manager\/assets\/banner-772x250.png?rev=3492128","banner_2x":"https:\/\/ps.w.org\/kitgenix-document-manager\/assets\/banner-1544x500.png?rev=3492128","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/kitgenix-document-manager\/assets\/icon-128x128.png?rev=3492128","icon_2x":"https:\/\/ps.w.org\/kitgenix-document-manager\/assets\/icon-256x256.png?rev=3492128","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Kitgenix Document Manager lets admins upload documents and share a stable link like:<\/p>\n\n<p>\/kitgenix-document-manager\/{slug}\/<\/p>\n\n<p>When you replace the file, the link stays the same and serves the new version.<\/p>\n\n<h3>Key Features<\/h3>\n\n<ul>\n<li>Stable links: replace the file without changing the URL<\/li>\n<li>Admin documents table with search, copy link, and \u201cOpen link\u201d action<\/li>\n<li>Quick edit modal (popup) for editing documents without leaving the table<\/li>\n<li>Document Categories: create categories and assign documents for easier organization<\/li>\n<li>Visibility controls: Public or Private documents<\/li>\n<li>Private behavior: redirect to login or return 403<\/li>\n<li>Serving mode: Inline (browser) or Download (attachment)<\/li>\n<li>Optional version history per document, including restore\/delete for older versions<\/li>\n<li>Bulk version cleanup: delete all old versions for a document (Versions tab + modal action)<\/li>\n<li>Select from Media Library: optionally pick an existing Media Library file instead of uploading<\/li>\n<li>Safer serving: correct Content-Type where possible, security headers, and conditional caching for public docs<\/li>\n<\/ul>\n\n<h3>Usage<\/h3>\n\n<ol>\n<li>Go to <strong>Kitgenix \u2192 Document Manager<\/strong><\/li>\n<li>Add a document (name + optional slug) and upload the initial file<\/li>\n<li>Copy the stable URL from the table and share it<\/li>\n<li>To update a document later, use <strong>Edit<\/strong> (modal) and upload a replacement file<\/li>\n<li>If <strong>Keep version history<\/strong> is enabled for that document, older files will appear in the Versions panel (restore\/delete)<\/li>\n<\/ol>\n\n<p>Categories:<\/p>\n\n<ul>\n<li>Use the <strong>Categories<\/strong> tab to add\/edit\/delete categories<\/li>\n<li>Assign a category when adding\/editing a document<\/li>\n<\/ul>\n\n<p>Note: Inline viewing works best for PDFs and images. Office documents (DOCX\/XLSX\/etc.) typically download because browsers can\u2019t render them natively.<\/p>\n\n<h3>Settings<\/h3>\n\n<p>Settings are available under the <strong>Settings<\/strong> tab:<\/p>\n\n<ul>\n<li>Allowed file extensions<\/li>\n<li>Default visibility (Public\/Private)<\/li>\n<li>Serving mode:\n\n<ul>\n<li>Inline (browser)<\/li>\n<li>Download (attachment)<\/li>\n<\/ul><\/li>\n<li>Versioning defaults (keep history by default, delete old versions when history is disabled)<\/li>\n<li>Private document behavior (login redirect or 403)<\/li>\n<li>Delete all plugin data on uninstall (optional)<\/li>\n<\/ul>\n\n<p>Frontend card options are available under the <strong>Frontend<\/strong> tab:<\/p>\n\n<ul>\n<li>Default document card button label<\/li>\n<li>Button style (Outline or Solid)<\/li>\n<li>Preview image size<\/li>\n<li>File type\/file size alignment<\/li>\n<li>Button alignment<\/li>\n<li>Button colors (normal + hover)<\/li>\n<li>Option to open the \u201cView\u201d button in a new tab<\/li>\n<li>Toggle showing file type and file size<\/li>\n<li>Toggle showing document description<\/li>\n<li>Shortcode Builder (generate a shortcode for one or multiple documents)<\/li>\n<\/ul>\n\n<h3>Security &amp; Caching<\/h3>\n\n<ul>\n<li>Private documents are not cached (no-store) and require login (or return 403)<\/li>\n<li>Public documents use conditional caching (ETag\/Last-Modified) so browsers\/CDNs can revalidate efficiently (including 304 Not Modified responses)<\/li>\n<li>Responses include security hardening headers like <code>X-Content-Type-Options: nosniff<\/code><\/li>\n<li>Private documents include <code>X-Robots-Tag: noindex, nofollow<\/code><\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin includes a shared \u201cKitgenix hub\u201d component in wp-admin which may fetch publicly available plugin metadata from WordPress.org using the WordPress core <code>plugins_api()<\/code> function (WordPress.org Plugins API).<\/p>\n\n<ul>\n<li>When it runs: only in wp-admin (Kitgenix plugin admin pages)<\/li>\n<li>Data sent: plugin slug(s) (no personal data)<\/li>\n<li>Data received: publicly available plugin information (e.g. active installs, ratings)<\/li>\n<li>Caching: responses are cached locally using transients for ~1 day:\n\n<ul>\n<li><code>kitgenix_hub_wporg_active_installs_v1<\/code><\/li>\n<li><code>kitgenix_hub_wporg_ratings_v1<\/code><h3>Developer Notes (Internal Reference)<\/h3>\nThis section documents internal identifiers used by the plugin (useful for developers, debugging, and advanced users).<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>Options (Settings)<\/h4>\n\n<ul>\n<li>Option name: <code>kitgenix_document_manager_settings<\/code> (constant: <code>KITGENIX_DOCUMENT_MANAGER_OPTION_NAME<\/code>)<\/li>\n<li>Settings group: <code>kitgenix_document_manager_settings_group<\/code><\/li>\n<li>Keys (defaults):\n\n<ul>\n<li><code>allowed_extensions<\/code>: <code>[\"pdf\",\"doc\",\"docx\",\"xls\",\"xlsx\",\"ppt\",\"pptx\",\"txt\"]<\/code> (stored as an array; comma-separated strings are accepted and normalized)<\/li>\n<li><code>default_visibility<\/code>: <code>public<\/code> (public|private)<\/li>\n<li><code>serving_mode<\/code>: <code>attachment<\/code> (attachment|inline)<\/li>\n<li><code>keep_version_history<\/code>: <code>true<\/code><\/li>\n<li><code>delete_old_versions<\/code>: <code>false<\/code><\/li>\n<li><code>private_behavior<\/code>: <code>login<\/code> (login|403)<\/li>\n<li><code>delete_data_on_uninstall<\/code>: <code>false<\/code><\/li>\n<li><code>card_button_label<\/code>: <code>\"View\"<\/code><\/li>\n<li><code>card_button_style<\/code>: <code>\"outline\"<\/code> (outline|solid)<\/li>\n<li><code>card_open_new_tab<\/code>: <code>false<\/code><\/li>\n<li><code>card_show_file_type<\/code>: <code>true<\/code><\/li>\n<li><code>card_show_file_size<\/code>: <code>true<\/code><\/li>\n<li><code>card_show_description<\/code>: <code>false<\/code><\/li>\n<li><code>card_image_size<\/code>: <code>96<\/code> (px)<\/li>\n<li><code>card_meta_alignment<\/code>: <code>\"justify\"<\/code> (justify|left|center|right)<\/li>\n<li><code>card_button_alignment<\/code>: <code>\"center\"<\/code> (justify|left|center|right)<\/li>\n<li><code>card_button_text_color<\/code>: <code>\"\"<\/code> (hex or blank)<\/li>\n<li><code>card_button_bg_color<\/code>: <code>\"\"<\/code> (hex or blank)<\/li>\n<li><code>card_button_border_color<\/code>: <code>\"\"<\/code> (hex or blank)<\/li>\n<li><code>card_button_hover_text_color<\/code>: <code>\"\"<\/code> (hex or blank)<\/li>\n<li><code>card_button_hover_bg_color<\/code>: <code>\"\"<\/code> (hex or blank)<\/li>\n<li><code>card_button_hover_border_color<\/code>: <code>\"\"<\/code> (hex or blank)<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>Data Model<\/h4>\n\n<ul>\n<li>Custom Post Type: <code>kitgenix_dm_doc<\/code><\/li>\n<li>Taxonomy (categories): <code>kitgenix_dm_cat<\/code><\/li>\n<li>Capability: <code>manage_kitgenix_document_manager_documents<\/code> (assigned to Administrators and Shop Managers on activation)<\/li>\n<\/ul>\n\n<h4>Post Meta<\/h4>\n\n<ul>\n<li><code>_kitgenix_document_manager_current_attachment_id<\/code> (current attachment ID)<\/li>\n<li><code>_kitgenix_document_manager_description<\/code> (optional document description shown on cards)<\/li>\n<li><code>_kitgenix_document_manager_visibility<\/code> (<code>public<\/code>|<code>private<\/code>)<\/li>\n<li><code>_kitgenix_document_manager_versioning_enabled<\/code> (0|1)<\/li>\n<li><code>_kitgenix_document_manager_versions<\/code> (array of attachment IDs)<\/li>\n<\/ul>\n\n<h4>Stable Link Endpoint<\/h4>\n\n<ul>\n<li>Base path: <code>\/kitgenix-document-manager\/{slug}\/<\/code><\/li>\n<li>Query var: <code>kitgenix_document_manager_slug<\/code><\/li>\n<\/ul>\n\n<h4>REST API<\/h4>\n\n<ul>\n<li><code>GET \/wp-json\/kitgenix-document-manager\/v1\/doc\/{slug}<\/code>\n\n<ul>\n<li>Returns: <code>slug<\/code>, <code>title<\/code>, <code>updated<\/code> (ISO 8601), <code>visibility<\/code>, <code>stable_url<\/code><\/li>\n<li>Private documents return 403 when logged out<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>Shortcode<\/h4>\n\n<ul>\n<li><p><code>[kitgenix_document_manager_link slug=\"my-doc\" label=\"Download\"]<\/code><\/p>\n\n<ul>\n<li>If <code>label<\/code> is omitted, the document title is used.<\/li>\n<li>Private documents render nothing for logged-out users.<\/li>\n<\/ul><\/li>\n<li><p><code>[kitgenix_document_manager_document slug=\"my-doc\" button_label=\"View\"]<\/code><\/p>\n\n<ul>\n<li>Renders a small preview (thumbnail\/icon), the document title, file type, file size, and a \u201cView\u201d button.<\/li>\n<li>Private documents render nothing for logged-out users.<\/li>\n<li>Optional attributes: <code>button_style=\"outline\"|\"solid\"<\/code>, <code>image_size=\"96\"<\/code>, <code>meta_align=\"justify\"|\"left\"|\"center\"|\"right\"<\/code>, <code>button_align=\"justify\"|\"left\"|\"center\"|\"right\"<\/code>, <code>show_description=\"0\"|\"1\"<\/code>, <code>new_tab=\"0\"|\"1\"<\/code>, <code>show_type=\"0\"|\"1\"<\/code>, <code>show_size=\"0\"|\"1\"<\/code>.<\/li>\n<li>To render multiple documents inline, use <code>slugs<\/code> instead of <code>slug<\/code>, e.g. <code>[kitgenix_document_manager_document slugs=\"doc-a,doc-b,doc-c\"]<\/code>.<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>Admin Actions (admin-post.php)<\/h4>\n\n<p>The Document Manager screen uses admin-post actions, including:<\/p>\n\n<ul>\n<li><code>kitgenix_document_manager_document_save<\/code>\n\n<ul>\n<li>Nonce field: <code>kitgenix_document_manager_document_nonce<\/code><\/li>\n<li>Nonce action: <code>kitgenix_document_manager_document_save<\/code><\/li>\n<\/ul><\/li>\n<li><code>kitgenix_document_manager_document_delete<\/code> (nonce query parameter <code>nonce<\/code>)<\/li>\n<li><code>kitgenix_document_manager_version_restore<\/code> (nonce query parameter <code>nonce<\/code>)<\/li>\n<li><code>kitgenix_document_manager_version_delete<\/code> (nonce query parameter <code>nonce<\/code>)<\/li>\n<li><code>kitgenix_document_manager_versions_delete_all<\/code> (nonce query parameter <code>nonce<\/code>)<\/li>\n<li><code>kitgenix_document_manager_category_save<\/code>\n\n<ul>\n<li>Nonce field: <code>kitgenix_document_manager_category_nonce<\/code><\/li>\n<li>Nonce action: <code>kitgenix_document_manager_category_save<\/code><\/li>\n<\/ul><\/li>\n<li><code>kitgenix_document_manager_category_delete<\/code> (nonce query parameter <code>nonce<\/code>)<\/li>\n<\/ul>\n\n<p>WordPress action hook names for the above screen actions:<\/p>\n\n<ul>\n<li><code>admin_post_kitgenix_document_manager_document_save<\/code><\/li>\n<li><code>admin_post_kitgenix_document_manager_document_delete<\/code><\/li>\n<li><code>admin_post_kitgenix_document_manager_version_restore<\/code><\/li>\n<li><code>admin_post_kitgenix_document_manager_version_delete<\/code><\/li>\n<li><code>admin_post_kitgenix_document_manager_versions_delete_all<\/code><\/li>\n<li><code>admin_post_kitgenix_document_manager_category_save<\/code><\/li>\n<li><code>admin_post_kitgenix_document_manager_category_delete<\/code><\/li>\n<\/ul>\n\n<p>The (hidden) CPT edit screen metabox uses:<\/p>\n\n<ul>\n<li><code>kitgenix_document_manager_upload_initial<\/code> (nonce field <code>kitgenix_document_manager_file_nonce<\/code>)<\/li>\n<li><code>kitgenix_document_manager_replace_file<\/code> (nonce field <code>kitgenix_document_manager_file_nonce<\/code>)<\/li>\n<li>Visibility\/versioning meta save nonce:\n\n<ul>\n<li>Nonce field: <code>kitgenix_document_manager_meta_nonce<\/code><\/li>\n<li>Nonce action: <code>kitgenix_document_manager_save_meta<\/code><\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>Hooks, Filters &amp; Assets (Internal)<\/h4>\n\n<p>This list is intended as a comprehensive map of WordPress integration points used by the plugin.<\/p>\n\n<ul>\n<li><code>plugins_loaded<\/code> (bootstrap init)<\/li>\n<li><code>init<\/code> (register CPT\/taxonomy; add rewrite rules)<\/li>\n<li>Filter: <code>query_vars<\/code> (adds query var <code>kitgenix_document_manager_slug<\/code>)<\/li>\n<li><code>template_redirect<\/code> (serves stable link responses)<\/li>\n<li><code>rest_api_init<\/code> (registers REST route)<\/li>\n<li><code>admin_menu<\/code> (registers Kitgenix menu + Document Manager submenu)<\/li>\n<li><code>admin_head<\/code> (outputs Kitgenix admin menu icon CSS)<\/li>\n<li><code>admin_init<\/code> (registers Settings API option)<\/li>\n<li><code>admin_enqueue_scripts<\/code> (enqueues Kitgenix hub CSS; enqueues Document Manager admin assets)<\/li>\n<li><code>add_meta_boxes<\/code> (adds the CPT file\/visibility metaboxes)<\/li>\n<li><code>save_post<\/code> (saves visibility + versioning meta)<\/li>\n<li><code>admin_post_kitgenix_document_manager_upload_initial<\/code> (metabox upload)<\/li>\n<li><code>admin_post_kitgenix_document_manager_replace_file<\/code> (metabox replace)<\/li>\n<li><code>admin_notices<\/code> (metabox success\/error notices via <code>kitgenix_dm_notice<\/code>)<\/li>\n<li>Filter: <code>manage_kitgenix_dm_doc_posts_columns<\/code> (adds list table columns)<\/li>\n<li><code>manage_kitgenix_dm_doc_posts_custom_column<\/code> (renders list table columns)<\/li>\n<li>Filter: <code>post_row_actions<\/code> (adds \u201cReplace File\u201d row action)<\/li>\n<li>Filter: <code>site_status_tests<\/code> (registers Site Health test)<\/li>\n<li>Shortcode: <code>kitgenix_document_manager_link<\/code><\/li>\n<\/ul>\n\n<p>Other admin UI identifiers:\n- Admin list-table column key: <code>kitgenix_dm_actions<\/code>\n- Version restore notice query arg: <code>kitgenix_version_restored=1<\/code><\/p>\n\n<p>Admin asset handles (wp-admin):<\/p>\n\n<ul>\n<li>Styles:\n\n<ul>\n<li><code>kitgenix-hub<\/code> (Kitgenix hub page)<\/li>\n<li><code>kitgenix-admin-ui<\/code> (shared Kitgenix admin UI)<\/li>\n<li><code>kitgenix-document-manager-admin<\/code> (Document Manager settings screen)<\/li>\n<\/ul><\/li>\n<li>Scripts:\n\n<ul>\n<li><code>kitgenix-admin-tabs<\/code> (shared Kitgenix tabs UI)<\/li>\n<li><code>kitgenix-document-manager-admin<\/code> (Document Manager admin JS)<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>Site Health (Internal)<\/h4>\n\n<ul>\n<li>Registers Site Health test ID: <code>kitgenix_document_manager_uploads<\/code> (checks uploads directory exists and is writable)<\/li>\n<\/ul>\n\n<h4>Notes (Internal)<\/h4>\n\n<ul>\n<li>Uninstall deletes a legacy transient <code>kitgenix_document_manager_site_health<\/code> for backwards compatibility, even though v1 does not set it.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to \/wp-content\/plugins\/<\/li>\n<li>Activate the plugin through the 'Plugins' menu.<\/li>\n<li>Go to Kitgenix -&gt; Document Manager.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20are%20files%20stored%3F\"><h3>Where are files stored?<\/h3><\/dt>\n<dd><p>When you upload a document inside Document Manager, files are stored in:<\/p>\n\n<p>wp-content\/uploads\/kitgenix-document-manager\/<\/p>\n\n<p>If you select an existing file from the Media Library, the plugin uses that attachment\u2019s existing location inside your normal WordPress uploads directory.<\/p><\/dd>\n<dt id=\"why%20does%20my%20file%20download%20even%20in%20%E2%80%9Cinline%20%28browser%29%E2%80%9D%20mode%3F\"><h3>Why does my file download even in \u201cInline (browser)\u201d mode?<\/h3><\/dt>\n<dd><p>Browsers can only display some file types inline (PDFs, images, and many text types). For formats that the browser can\u2019t render (e.g. DOCX\/XLSX), the file will download.<\/p><\/dd>\n<dt id=\"my%20stable%20link%20returns%20404.%20what%20should%20i%20do%3F\"><h3>My stable link returns 404. What should I do?<\/h3><\/dt>\n<dd><p>Go to <strong>Settings \u2192 Permalinks<\/strong> and click <strong>Save Changes<\/strong> to flush rewrite rules.<\/p><\/dd>\n<dt id=\"can%20i%20restore%20an%20older%20file%3F\"><h3>Can I restore an older file?<\/h3><\/dt>\n<dd><p>Yes. Enable <strong>Keep version history<\/strong> for that document, then use <strong>Edit<\/strong> to open the modal and restore\/delete older versions from the Versions panel.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0 (18 March 2026)<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Added a document card shortcode for embedding a document preview with file type\/size and a \u201cView\u201d button (includes button label\/new tab\/field toggles and outline\/solid button style).<\/li>\n<li>Added a stable link endpoint: \/kitgenix-document-manager\/{slug}\/ (file can be replaced without changing the URL).<\/li>\n<li>Added a Document Manager admin area under the Kitgenix menu with tabs for Documents, Categories, Versions, Settings and Support.<\/li>\n<li>Added an admin documents table with search plus quick actions (copy link, open link, edit, replace file).<\/li>\n<li>Added a quick edit modal for editing documents without leaving the documents table.<\/li>\n<li>Added Document Categories (create\/manage categories and assign them to documents).<\/li>\n<li>Added per-document visibility (Public\/Private) plus private behavior options (redirect to login or return 403).<\/li>\n<li>Added file serving modes (inline vs download\/attachment) with safer inline handling.<\/li>\n<li>Added optional per-document version history, including restore and delete for older versions.<\/li>\n<li>Added bulk version cleanup tools (delete all old versions for a document via the Versions tab and modal actions).<\/li>\n<li>Added Media Library selection support (choose an existing Media Library file instead of uploading).<\/li>\n<li>Added Settings for allowed file extensions plus sensible defaults for visibility, serving mode and versioning.<\/li>\n<li>Added safer file serving with traversal checks, security headers, and conditional caching for public documents (ETag\/Last-Modified) while private documents are not cached (no-store).<\/li>\n<li>Added a Site Health test for the Kitgenix Document Manager uploads directory.<\/li>\n<li>Added uninstall behavior that removes plugin settings, with an option to delete all Document Manager data (documents and related attachments\/versions).<\/li>\n<li>UI: Improved the Kitgenix admin header layout and social icon links (compact icon buttons) across settings and the Kitgenix hub.<\/li>\n<li>Fix: Admin notices now display above the Kitgenix header using the WordPress standard notice area.<\/li>\n<li>Fix: Added defensive notice normalization to prevent notices being relocated into the header by other scripts.<\/li>\n<li>UI: Admin tables inside Kitgenix pages now use Kitgenix styling for a more consistent branded look.<\/li>\n<li>Fix: Added spacing between adjacent action links\/buttons (e.g., Edit\/Delete).<\/li>\n<li>Security: Normalised metabox and admin-post request handling so POST values are read only after nonce verification, and upload arrays are sanitized before use.<\/li>\n<li>Fix: Stream documents with validated file paths and safe response headers instead of reading file contents into memory for output.<\/li>\n<li>Fix: Escaped shared Kitgenix hub card media output for WordPress coding standards compliance.<\/li>\n<li>Maintenance: Updated the plugin Author URI to the public Kitgenix WordPress.org profile and replaced the old custom admin-menu icon CSS with the native Dashicons icon.<\/li>\n<\/ul>","raw_excerpt":"Manage document downloads with stable links, version history, and private file access.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/288086","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=288086"}],"author":[{"embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kitgenix"}],"wp:attachment":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=288086"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=288086"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=288086"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=288086"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=288086"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=288086"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}