{"id":339386,"date":"2026-07-21T11:07:47","date_gmt":"2026-07-21T11:07:47","guid":{"rendered":"https:\/\/ru.wordpress.org\/plugins\/mediafolder\/"},"modified":"2026-07-21T17:17:32","modified_gmt":"2026-07-21T17:17:32","slug":"kda-media-button","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/kda-media-button\/","author":23530499,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.3","stable_tag":"1.3.3","tested":"7.0.2","requires":"5.0","requires_php":"7.2","requires_plugins":null,"header_name":"KDA Media Button","header_author":"Denis K.","header_description":"Adds a button to the classic WordPress editor that opens a popup to browse a site folder, upload or pick an image and insert it into the post. Fully translatable (English and Russian included).","assets_banners_color":"","last_updated":"2026-07-21 17:17:32","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":{"1.2.18":{"tag":"1.2.18","author":"deniskey","date":"2026-07-21 11:07:32"},"1.2.19":{"tag":"1.2.19","author":"deniskey","date":"2026-07-21 11:22:24"},"1.3.0":{"tag":"1.3.0","author":"deniskey","date":"2026-07-21 13:11:46"},"1.3.1":{"tag":"1.3.1","author":"deniskey","date":"2026-07-21 16:20:56"},"1.3.2":{"tag":"1.3.2","author":"deniskey","date":"2026-07-21 17:02:30"},"1.3.3":{"tag":"1.3.3","author":"deniskey","date":"2026-07-21 17:17:32"}},"upgrade_notice":{"1.3.3":"<p>Bug fixes and improvements.<\/p>","1.3.2":"<p>Bug fixes and improvements.<\/p>","1.3.1":"<p>Bug fixes and improvements.<\/p>","1.3.0":"<p>Improvements and bug fixes.<\/p>","1.2.24":"<p>Removed hardcoded default base folder path. Saving an empty accessible folder is now rejected with an error.<\/p>","1.2.23":"<p>Fixed default base folder handling when the stored option is empty. The folder field now always shows a valid default path.<\/p>","1.2.22":"<p>Removed Gutenberg block support and block files. Public gallery CSS is disabled by default.<\/p>","1.2.21":"<p>Fixed default base folder fallback in settings and ensured default path is preserved on save.<\/p>","1.2.20":"<p>Updated default base folder path format.<\/p>","1.2.19":"<p>Added Russian readme and fixed language support metadata.<\/p>","1.2.18":"<p>Security and fixes.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3617486,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3617486,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3617486,"resolution":false,"location":"assets","locale":false}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.18","1.2.19","1.3.0","1.3.1","1.3.2","1.3.3"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[155767,17545,163,84,259],"plugin_category":[50],"plugin_contributors":[272649],"plugin_business_model":[],"class_list":["post-339386","plugin","type-plugin","status-publish","hentry","plugin_tags-classic-editor","plugin_tags-folder","plugin_tags-images","plugin_tags-media","plugin_tags-upload","plugin_category-media","plugin_contributors-deniskey","plugin_committers-deniskey"],"banners":[],"icons":{"svg":"https:\/\/ps.w.org\/kda-media-button\/assets\/icon.svg?rev=3617486","icon":"https:\/\/ps.w.org\/kda-media-button\/assets\/icon.svg?rev=3617486","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>KDA Media Button extends the classic WordPress editor with a new button. Clicking the button opens a popup window that gives access to the site structure so you can:<\/p>\n\n<ul>\n<li>Browse folders relative to a configured base folder.<\/li>\n<li>Upload new images directly into the current folder.<\/li>\n<li>Select an existing image and insert it into the post.<\/li>\n<\/ul>\n\n<p>The plugin is fully configurable from its settings page:<\/p>\n\n<ul>\n<li><strong>Accessible folder<\/strong> -- a path relative to the site root. The plugin can only browse and upload inside this folder, which keeps the rest of the filesystem protected.<\/li>\n<li><strong>Allowed formats<\/strong> -- comma separated list of allowed extensions. Leaving it empty allows all common image formats (jpg, jpeg, png, gif, webp, svg, ico, bmp, tiff, tif, avif).<\/li>\n<li><strong>Roles<\/strong> -- choose which roles (e.g. Administrator, Editor) can see the editor button.<\/li>\n<li><strong>Lightbox link class<\/strong> -- set a custom CSS class for the image link, or leave empty to disable the class.<\/li>\n<li><strong>Activity log<\/strong> -- optionally keep a log of uploads, deletions, folder creation and renames.<\/li>\n<\/ul>\n\n<h4>Working with images<\/h4>\n\n<p>When an image is selected you can fine-tune the insertion:<\/p>\n\n<ul>\n<li><strong>Size<\/strong> -- insert the original (Full) or a generated Thumbnail \/ Medium \/ Large copy.<\/li>\n<li><strong>Alignment<\/strong> -- None, Left, Center or Right (adds the matching WordPress align class).<\/li>\n<li><strong>Alt text<\/strong> -- custom alternative text for the inserted image.<\/li>\n<li><strong>Link to full image<\/strong> -- wrap the image in a link to the full-size file with a built-in lightbox.<\/li>\n<li><strong>Metadata<\/strong> -- resolution (width&times;height) and file size are shown before insertion, with a live thumbnail preview.<\/li>\n<\/ul>\n\n<p>You can select multiple images (multi-select) and insert them as a gallery using the <code>[kda_media_button_gallery]<\/code> shortcode:<\/p>\n\n<pre><code>[kda_media_button_gallery urls=\"https:\/\/...\/a.jpg,https:\/\/...\/b.jpg\" size=\"medium\" columns=\"3\" link=\"none\"]\n<\/code><\/pre>\n\n<h4>File management<\/h4>\n\n<p>Inside the popup you can also manage the folder structure:<\/p>\n\n<ul>\n<li>Create new subfolders.<\/li>\n<li>Rename files and folders.<\/li>\n<li>Delete files and folders (recursive).<\/li>\n<\/ul>\n\n<h4>Security<\/h4>\n\n<ul>\n<li>Folder traversal outside the configured base folder is blocked.<\/li>\n<li>Uploaded files are validated against the allowed formats list and handled through the WordPress upload API.<\/li>\n<li>All AJAX requests are protected with nonces and role\/capability checks.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>kda-media-button<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the \"Plugins\" menu in WordPress.<\/li>\n<li>Go to <strong>Settings &rarr; KDA Media Button<\/strong> to configure the accessible folder, allowed formats and roles.<\/li>\n<li>Open a post in the classic editor and use the new \"Insert image from folder\" button.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20with%20the%20block%20editor%20%28gutenberg%29%3F\"><h3>Does it work with the block editor (Gutenberg)?<\/h3><\/dt>\n<dd><p>No. Gutenberg support is currently disabled. The plugin works only with the classic editor.<\/p><\/dd>\n<dt id=\"can%20the%20plugin%20access%20any%20folder%20on%20the%20server%3F\"><h3>Can the plugin access any folder on the server?<\/h3><\/dt>\n<dd><p>No. It is restricted to the folder configured on the settings page (relative to the site root). Path traversal is prevented.<\/p><\/dd>\n<dt id=\"which%20image%20formats%20are%20allowed%20by%20default%3F\"><h3>Which image formats are allowed by default?<\/h3><\/dt>\n<dd><p>All common image formats are allowed. You can restrict them on the settings page.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>Fixed plugin icon deployment to WordPress.org assets directory.<\/li>\n<li>Improved lightbox reopening behavior.<\/li>\n<li>Disabled columns control until multiple images are selected.<\/li>\n<li>Added link-to-full-image option in insert modal.<\/li>\n<li>Removed autofocus from modal close button.<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Improved plugin asset deployment to WordPress.org.<\/li>\n<li>Fixed lightbox reopening behavior after close.<\/li>\n<li>Disabled columns control until multiple images are selected.<\/li>\n<li>Added link-to-full-image option in the insert modal.<\/li>\n<li>Removed autofocus from the modal close button on open.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Fixed lightbox reopening after close without page refresh.<\/li>\n<li>Disabled columns control until multiple images are selected.<\/li>\n<li>Added link-to-full-image checkbox in the insert modal.<\/li>\n<li>Removed autofocus from the modal close button on open.<\/li>\n<li>Improved modal option layout and validation.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Improvements and bug fixes for the classic editor integration.<\/li>\n<li>Refined base folder handling and settings validation.<\/li>\n<li>General stability and usability improvements.<\/li>\n<\/ul>\n\n<h4>1.2.24<\/h4>\n\n<ul>\n<li>Removed hardcoded default base folder path from code.<\/li>\n<li>Saving an empty accessible folder is now rejected with an error.<\/li>\n<li>Added centralized helper for base folder retrieval.<\/li>\n<li>Improved uninstall routine to use shared helper.<\/li>\n<\/ul>\n\n<h4>1.2.23<\/h4>\n\n<ul>\n<li>Fixed default base folder handling when the stored option is empty.<\/li>\n<li>The folder field now always shows a valid default path in settings.<\/li>\n<\/ul>\n\n<h4>1.2.22<\/h4>\n\n<ul>\n<li>Removed Gutenberg block support and block files from the plugin.<\/li>\n<li>Public gallery CSS is now disabled by default.<\/li>\n<li>Cleaned up block-related assets and metadata.<\/li>\n<\/ul>\n\n<h4>1.2.21<\/h4>\n\n<ul>\n<li>Fixed default base folder fallback in settings.<\/li>\n<li>Ensured default path is preserved when saving the settings form.<\/li>\n<\/ul>\n\n<h4>1.2.20<\/h4>\n\n<ul>\n<li>Updated default base folder path to include leading and trailing slashes.<\/li>\n<li>Normalized path formatting across all retrieval points.<\/li>\n<\/ul>\n\n<h4>1.2.19<\/h4>\n\n<ul>\n<li>Added Russian readme translation.<\/li>\n<li>Fixed language support metadata for WordPress.org.<\/li>\n<li>Updated contributor name.<\/li>\n<\/ul>\n\n<h4>1.2.18<\/h4>\n\n<ul>\n<li>Security: blocked symlink escapes in path resolution and required edit_posts\/edit_pages capability for REST access.<\/li>\n<li>Fixed size AJAX handler reading an undefined variable.<\/li>\n<li>Refactored legacy admin-ajax handlers to reuse shared core functions.<\/li>\n<li>Cached image metadata to speed up browsing.<\/li>\n<li>Added result limit to recursive search.<\/li>\n<li>Unified image\/shortcode rendering with responsive srcset.<\/li>\n<li>SVG uploads\/replacements are sanitized on save.<\/li>\n<li>Temporarily disabled Gutenberg block support.<\/li>\n<li>Registered the block via <code>register_block_type_from_metadata<\/code> (matches <code>block.json<\/code> <code>apiVersion: 2<\/code>); activity log is no longer autoloaded.<\/li>\n<\/ul>\n\n<h4>1.2.16<\/h4>\n\n<ul>\n<li>Added Gutenberg block \"Media from Folder\" (<code>kda-media-button\/media<\/code>).<\/li>\n<li>Added REST API endpoints: <code>browse<\/code>, <code>size<\/code>, <code>srcset<\/code>, <code>tree<\/code>, <code>upload<\/code>, <code>mkdir<\/code>, <code>rename<\/code>, <code>delete<\/code>, <code>clear_log<\/code>, <code>duplicate<\/code>, <code>bulk_delete<\/code>, <code>bulk_move<\/code>, <code>replace_image<\/code>.<\/li>\n<li>Added recursive folder search with subfolder checkbox.<\/li>\n<li>Added bulk delete, bulk move, file duplicate, copy URL (single + bulk).<\/li>\n<li>Added responsive <code>srcset<\/code>\/<code>sizes<\/code> to gallery shortcode.<\/li>\n<li>Added non-image file support (inserted as links).<\/li>\n<li>Added WP-CLI commands: <code>wp kda-media-button clean-cache<\/code> and <code>wp kda-media-button rebuild-cache<\/code>.<\/li>\n<li>Added replace-image overwrite endpoint.<\/li>\n<li>Added settings page tabs: General, Permissions, Advanced, Activity log.<\/li>\n<li>Added keyboard navigation (arrow keys + Enter) and skeleton loaders.<\/li>\n<li>Added dark theme support (<code>prefers-color-scheme: dark<\/code>) and mobile breakpoint.<\/li>\n<\/ul>\n\n<h4>1.2.14<\/h4>\n\n<ul>\n<li>Minor fixes and usability improvements.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First version.<\/li>\n<li>Classic editor button opening a folder browser popup.<\/li>\n<li>Upload and select images with insertion into the post.<\/li>\n<li>Settings page: base folder, allowed formats and role restriction.<\/li>\n<\/ul>","raw_excerpt":"Browse a site folder, pick images and insert them into posts from the classic WordPress editor.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/339386","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=339386"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/deniskey"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=339386"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=339386"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=339386"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=339386"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=339386"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=339386"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}