{"id":319117,"date":"2026-06-22T22:39:49","date_gmt":"2026-06-22T22:39:49","guid":{"rendered":"https:\/\/es.wordpress.org\/plugins\/niquelao-image-optimizer\/"},"modified":"2026-06-25T08:45:09","modified_gmt":"2026-06-25T08:45:09","slug":"niquelao-image-optimizer","status":"publish","type":"plugin","link":"https:\/\/mn.wordpress.org\/plugins\/niquelao-image-optimizer\/","author":17836515,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.5.1","stable_tag":"1.5.1","tested":"7.0","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Niquelao Image Optimizer","header_author":"Koke P\u00e9rez","header_description":"Optimiza im\u00e1genes PNG, JPEG y WebP autom\u00e1ticamente al subir. Conversi\u00f3n a WebP, reoptimizaci\u00f3n en lote y estad\u00edsticas de ahorro.","assets_banners_color":"62686f","last_updated":"2026-06-25 08:45:09","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.kokeperez.es\/niquelao-image-optimizer\/","header_author_uri":"https:\/\/kokeperez.es","rating":0,"author_block_rating":0,"active_installs":0,"downloads":106,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.5":{"tag":"1.3.5","author":"kokenet","date":"2026-06-22 22:39:25"},"1.5.1":{"tag":"1.5.1","author":"kokenet","date":"2026-06-25 08:45:09"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3582459,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3582459,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3582459,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3582459,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.5","1.5.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3582461,"resolution":"1","location":"assets","locale":"","width":834,"height":817},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3582461,"resolution":"2","location":"assets","locale":"","width":818,"height":307},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3582461,"resolution":"3","location":"assets","locale":"","width":619,"height":825},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3582461,"resolution":"4","location":"assets","locale":"","width":825,"height":684},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3585892,"resolution":"5","location":"assets","locale":"","width":1105,"height":652},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3585892,"resolution":"6","location":"assets","locale":"","width":1111,"height":822}},"screenshots":{"1":"Settings \u2014 image resizing, compression quality (JPEG\/PNG\/WebP) and processing options","2":"Bulk Optimization \u2014 reoptimize your entire existing media library with a progress bar","3":"Savings Statistics \u2014 totals by file type and a log of the most recent optimizations","4":"Diagnostics \u2014 Imagick\/GD availability, WebP support and uploads folder permissions","5":"Settings \u2014 backup options and the new automatic WebP serving via <code>.htaccess<\/code> (no redirects)","6":"Maintenance \u2014 scan, download and purge accumulated <code>.niquelao-bak<\/code> backup files in batches"}},"plugin_section":[],"plugin_tags":[56174,29161,12497,247,15376],"plugin_category":[54],"plugin_contributors":[268423],"plugin_business_model":[],"class_list":["post-319117","plugin","type-plugin","status-publish","hentry","plugin_tags-compress-images","plugin_tags-image-optimization","plugin_tags-imagick","plugin_tags-performance","plugin_tags-webp","plugin_category-security-and-spam-protection","plugin_contributors-kokenet","plugin_committers-kokenet"],"banners":{"banner":"https:\/\/ps.w.org\/niquelao-image-optimizer\/assets\/banner-772x250.png?rev=3582459","banner_2x":"https:\/\/ps.w.org\/niquelao-image-optimizer\/assets\/banner-1544x500.png?rev=3582459","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/niquelao-image-optimizer\/assets\/icon-128x128.png?rev=3582459","icon_2x":"https:\/\/ps.w.org\/niquelao-image-optimizer\/assets\/icon-256x256.png?rev=3582459","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/niquelao-image-optimizer\/assets\/screenshot-1.png?rev=3582461","caption":"Settings \u2014 image resizing, compression quality (JPEG\/PNG\/WebP) and processing options"},{"src":"https:\/\/ps.w.org\/niquelao-image-optimizer\/assets\/screenshot-2.png?rev=3582461","caption":"Bulk Optimization \u2014 reoptimize your entire existing media library with a progress bar"},{"src":"https:\/\/ps.w.org\/niquelao-image-optimizer\/assets\/screenshot-3.png?rev=3582461","caption":"Savings Statistics \u2014 totals by file type and a log of the most recent optimizations"},{"src":"https:\/\/ps.w.org\/niquelao-image-optimizer\/assets\/screenshot-4.png?rev=3582461","caption":"Diagnostics \u2014 Imagick\/GD availability, WebP support and uploads folder permissions"},{"src":"https:\/\/ps.w.org\/niquelao-image-optimizer\/assets\/screenshot-5.png?rev=3585892","caption":"Settings \u2014 backup options and the new automatic WebP serving via <code>.htaccess<\/code> (no redirects)"},{"src":"https:\/\/ps.w.org\/niquelao-image-optimizer\/assets\/screenshot-6.png?rev=3585892","caption":"Maintenance \u2014 scan, download and purge accumulated <code>.niquelao-bak<\/code> backup files in batches"}],"raw_content":"<!--section=description-->\n<p>Niquelao Image Optimizer automatically compresses images on upload and allows bulk re-optimization of your entire existing media library. It uses Imagick (preferred) or GD (fallback) \u2014 no external dependencies or API keys needed.<\/p>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li>Automatic optimization on every upload<\/li>\n<li>Bulk optimization of the existing media library<\/li>\n<li>Optional WebP conversion for every image<\/li>\n<li>Optional automatic .webp serving via .htaccess under the same original URL (no redirects)<\/li>\n<li>WordPress thumbnail optimization<\/li>\n<li>Automatic backup of the original file before processing<\/li>\n<li>Optional thumbnail backups (disabled by default) plus a Maintenance screen to scan, download and purge accumulated backups<\/li>\n<li>Detailed savings statistics per file type<\/li>\n<li>Copyright\/authorship EXIF metadata preserved after stripping<\/li>\n<li>Optional automatic resizing with configurable maximum width and height<\/li>\n<li>Compatible with Imagick (preferred) and GD (fallback)<\/li>\n<li>No external dependencies \u2014 works on any shared hosting<\/li>\n<\/ul>\n\n<h3>Requirements<\/h3>\n\n<ul>\n<li>WordPress 5.8 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<li>Imagick or GD extension enabled on the server<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>niquelao-image-optimizer\/<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin from <strong>Plugins \u2192 Installed Plugins<\/strong><\/li>\n<li>Configure it under <strong>Niquelao Optimizer \u2192 Settings<\/strong><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20on%20shared%20hosting%3F\"><h3>Does it work on shared hosting?<\/h3><\/dt>\n<dd><p>Yes. It uses the PHP Imagick or GD libraries, available on virtually all shared hosting providers.<\/p><\/dd>\n<dt id=\"are%20the%20original%20images%20saved%3F\"><h3>Are the original images saved?<\/h3><\/dt>\n<dd><p>Optionally. Enable \"Save backup\" in the settings to keep a <code>.niquelao-bak<\/code> copy alongside each processed file.<\/p><\/dd>\n<dt id=\"my%20hosting%20has%20limited%20disk%20space%20%2F%20inodes%2C%20how%20do%20i%20clean%20up%20backups%3F\"><h3>My hosting has limited disk space \/ inodes, how do I clean up backups?<\/h3><\/dt>\n<dd><p>By default only the full-size original is backed up, not every thumbnail size. Go to <strong>Niquelao Optimizer \u2192 Maintenance<\/strong> to scan for accumulated <code>.niquelao-bak<\/code> files, download a ZIP copy, and purge them in batches.<\/p><\/dd>\n<dt id=\"is%20copyright%20information%20preserved%3F\"><h3>Is copyright information preserved?<\/h3><\/dt>\n<dd><p>Yes. The EXIF\/IPTC Copyright, Artist and Author fields are preserved after stripping the rest of the metadata.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Fixed: Plugin Check findings \u2014 replaced direct <code>unlink()<\/code> calls with <code>wp_delete_file()<\/code> in the Maintenance ZIP download and cleanup routines<\/li>\n<li>Fixed: added justified <code>phpcs:ignore<\/code> annotations for the unavoidable direct <code>is_writable()<\/code>\/<code>readfile()<\/code> filesystem calls used to manage <code>.htaccess<\/code> and stream the temporary backup ZIP (no WP_Filesystem equivalent exists for these specific operations)<\/li>\n<li>Fixed: added justified <code>phpcs:ignore<\/code> annotations for <code>$_POST['offset']<\/code>\/<code>$_POST['token']<\/code> reads in Maintenance AJAX handlers, where the nonce is already verified via <code>check_ajax_referer()<\/code> inside <code>check_permissions()<\/code> earlier in the same method<\/li>\n<li>Fixed: removed the remote Google Fonts <code>@import<\/code> in the admin stylesheet (present since the first approved version) \u2014 admin UI now uses a local system-font stack, with no third-party assets loaded<\/li>\n<li>Fixed: missing i18n wrapper on the \"No Imagick\/GD detected\" troubleshooting copy in the Diagnostics page<\/li>\n<li>Fixed: hardcoded Spanish strings in the Media Library inline JS (single-image optimize button) now routed through PHP <code>__()<\/code> and passed to the script as a translatable object<\/li>\n<li>Changed: README.md rewritten to match the current version and defer to readme.txt as the single source of truth for the changelog, instead of duplicating (and drifting out of sync with) it<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Added: optional setting \"Servir WebP autom\u00e1ticamente\" \u2014 inserts\/removes a <code>.htaccess<\/code> block (via WordPress' insert_with_markers()\/extract_from_markers()) that serves the <code>.webp<\/code> version under the same original URL when the browser supports it, with no redirects and no URL changes<\/li>\n<li>Added: status indicators for mod_rewrite availability, <code>.htaccess<\/code> writability and whether the rule block is actually installed<\/li>\n<li>Added: the <code>.htaccess<\/code> block is automatically removed on plugin deactivation and uninstall, leaving no leftover server rules<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Added: optional \"Keep thumbnail backups\" setting (off by default) \u2014 when disabled, only the full-size original gets a <code>.niquelao-bak<\/code> copy instead of every generated thumbnail size, saving disk space and inodes<\/li>\n<li>Added: new Maintenance screen to scan, download (as ZIP) and bulk-purge accumulated <code>.niquelao-bak<\/code> files, processed in batches via AJAX to support shared hosting with execution time\/inode limits<\/li>\n<li>Added: uninstall routine now also removes the temporary ZIP folder and the new backup-thumbs option<\/li>\n<\/ul>\n\n<h4>1.3.5<\/h4>\n\n<ul>\n<li>Fixed: settings page hook suffixes were calculated manually and didn't match the real hook suffixes generated by WordPress (which derive from the top-level menu_title, not the menu slug), causing CSS\/JS to fail to load on Bulk Optimization, Statistics and Diagnostics pages<\/li>\n<li>Fixed: admin styles\/scripts now use the real hook_suffix returned by add_menu_page()\/add_submenu_page() instead of a hardcoded guess<\/li>\n<li>Fixed: media library \"Optimize\" button (upload.php\/post.php) registered its own style\/script handle instead of relying on a handle that wasn't enqueued on those screens<\/li>\n<li>Fixed: synced plugin version number across the main file header, the NIQUELAO_VERSION constant and readme.txt Stable tag<\/li>\n<li>Fixed: missing i18n wrapper on one bulk-optimization status string<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Unified license to GPL-2.0-or-later across all files<\/li>\n<li>Added full internationalization (i18n) via <strong>() and esc_html<\/strong>() functions<\/li>\n<li>Updated Text Domain header to match plugin slug (niquelao-image-optimizer)<\/li>\n<li>Removed deprecated load_plugin_textdomain() call (auto-loaded since WP 4.6)<\/li>\n<li>Created uninstall.php to clean up table, options and postmeta on uninstall<\/li>\n<li>Fixed require_once order: all includes at the top of the main file<\/li>\n<li>languages\/ folder ready for translations<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Updated Plugin URI to kokeperez.es<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added automatic resizing with configurable maximum width and height<\/li>\n<li>EXIF Copyright\/Artist metadata now preserved after stripping (Imagick and GD)<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Atomic file writes using a temporary file<\/li>\n<li>Improved diagnostics page<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Bulk optimization with progress bar<\/li>\n<li>WebP conversion support<\/li>\n<li>Statistics page<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Automatic PNG, JPEG and WebP image optimizer. No external binaries or API keys required. Works on any shared hosting.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/319117","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/mn.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/mn.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=319117"}],"author":[{"embeddable":true,"href":"https:\/\/mn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kokenet"}],"wp:attachment":[{"href":"https:\/\/mn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=319117"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/mn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=319117"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/mn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=319117"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/mn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=319117"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/mn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=319117"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/mn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=319117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}