{"id":36954289,"url":"https://github.com/bjornfix/devenia-replace-media","last_synced_at":"2026-02-06T22:00:40.227Z","repository":{"id":328190476,"uuid":"1113300757","full_name":"bjornfix/devenia-replace-media","owner":"bjornfix","description":"WordPress plugin to replace images and files while keeping the same URL. Works with Elementor and Gutenberg.","archived":false,"fork":false,"pushed_at":"2025-12-17T00:46:44.000Z","size":25,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-13T21:19:44.667Z","etag":null,"topics":["elementor","media-library","wordpress","wordpress-plugin"],"latest_commit_sha":null,"homepage":"https://devenia.com/plugins/replace-media/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bjornfix.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-09T19:39:28.000Z","updated_at":"2025-12-17T00:46:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bjornfix/devenia-replace-media","commit_stats":null,"previous_names":["bjornfix/devenia-replace-media"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/bjornfix/devenia-replace-media","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bjornfix%2Fdevenia-replace-media","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bjornfix%2Fdevenia-replace-media/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bjornfix%2Fdevenia-replace-media/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bjornfix%2Fdevenia-replace-media/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bjornfix","download_url":"https://codeload.github.com/bjornfix/devenia-replace-media/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bjornfix%2Fdevenia-replace-media/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29178535,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T20:14:21.878Z","status":"ssl_error","status_checked_at":"2026-02-06T20:14:21.443Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["elementor","media-library","wordpress","wordpress-plugin"],"created_at":"2026-01-13T12:59:43.239Z","updated_at":"2026-02-06T22:00:40.221Z","avatar_url":"https://github.com/bjornfix.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Devenia Replace Media\n\n**Replace images and files while keeping the same URL.** Works with Elementor and Gutenberg.\n\n[![WordPress](https://img.shields.io/badge/WordPress-5.0%2B-blue.svg)](https://wordpress.org)\n[![PHP](https://img.shields.io/badge/PHP-7.4%2B-purple.svg)](https://php.net)\n[![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-blue.svg)](https://www.gnu.org/licenses/gpl-2.0)\n\n## The Problem\n\nYou uploaded an image. It's used in 47 places across your site. Now you need to replace it with a better version.\n\nWordPress gives you two bad options:\n1. Delete the old image, upload new one, manually update all 47 places\n2. Upload with same filename and pray the cache clears\n\n## The Solution\n\nThis plugin adds a \"Replace File\" button to every image in your media library. Click it, upload the new file, done. Same URL, new file, automatic cache busting.\n\n## Features\n\n- Replace any file in media library (images, PDFs, etc.)\n- Keeps the same URL - no broken links\n- Works in Media Library, Elementor gallery editor, anywhere WordPress media is used\n- Preserves captions, alt text, and all metadata\n- Automatic cache busting so visitors see the new file immediately\n- Regenerates all thumbnail sizes\n\n## Installation\n\n1. Download from [Releases](https://github.com/bjornfix/devenia-replace-media/releases)\n2. Upload via WordPress Admin → Plugins → Add New → Upload Plugin\n3. Activate the plugin\n\nThat's it. No settings to configure.\n\n## How to Use\n\n1. Go to Media Library\n2. Click on any image\n3. Click \"Replace File\" button\n4. Upload your new file\n5. Done - all instances across your site now show the new image\n\nThe button also appears in Elementor's gallery editor when editing an image.\n\n## How It Works\n\nWhen you replace a file:\n1. The new file overwrites the old one on disk\n2. All thumbnail sizes are regenerated\n3. A version parameter is added to URLs (`?v=timestamp`)\n4. Browser caches are bypassed, visitors see the new file immediately\n\n## Requirements\n\n- WordPress 5.0+\n- PHP 7.4+\n\n## Changelog\n\n### 1.7.5\n- Fixed: Replace File button injection in Media Library grid/details view on newer WordPress admin markup\n- Improved: More robust attachment ID detection across WP media frames and DOM\n- Fixed: Media Library grid view details modal now detects attachment ID via `?item=\u003cID\u003e`\n- Improved: Cache busting now also applies to responsive image `srcset` and works across repeated replacements\n- Improved: After replacement, Media Library refresh behavior is more reliable\n- Improved: Safer file replacement flow (staged write + rollback) and stricter permissions check\n\n### 1.7.4\n- Added Replace File button on Edit Media screen\n\n### 1.7.3\n- Fixed: Use wp_add_inline_script() instead of raw script tags\n- Fixed: Added nonce verification for GET requests\n- Fixed: Improved file upload validation\n- Added: User capability checks\n\n### 1.7.2\n- Changed slug to devenia-replace-media (WordPress.org requirement)\n\n### 1.7.1\n- Fixed text domain to match plugin slug\n\n### 1.7\n- Fixed nonce verification warnings\n- Improved input validation for WordPress.org Plugin Check compliance\n\n### 1.6\n- Uses WordPress Filesystem API for all file operations\n- Improved security and WordPress.org compatibility\n\n### 1.5\n- Added automatic cache busting - URLs include version parameter after replacement\n- Browsers automatically fetch new files without manual cache clearing\n\n### 1.4\n- Added support for Elementor gallery editor\n\n### 1.3\n- Changed script loading method for better compatibility\n\n### 1.2\n- Improved attachment ID detection in media modals\n\n### 1.1\n- Added JavaScript injection for media modal support\n\n### 1.0\n- Initial release\n- Replace files from Media Library list view\n- Preserve metadata and regenerate thumbnails\n\n## License\n\nGPL-2.0+\n\n## Author\n\n[Devenia](https://devenia.com) - We've been doing SEO and web development since 1993.\n\n## Links\n\n- [Plugin Page](https://devenia.com/plugins/replace-media/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbjornfix%2Fdevenia-replace-media","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbjornfix%2Fdevenia-replace-media","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbjornfix%2Fdevenia-replace-media/lists"}