{"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-08-26T10:40:42","modified_gmt":"2026-08-26T10:40:42","slug":"niquelao-image-optimizer","status":"publish","type":"plugin","link":"https:\/\/hsb.wordpress.org\/plugins\/niquelao-image-optimizer\/","author":17836515,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.5.3","stable_tag":"1.5.3","tested":"7.1","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-08-26 10:40:42","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":10,"downloads":285,"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"},"1.5.2":{"tag":"1.5.2","author":"kokenet","date":"2026-08-21 19:45:48"},"1.5.3":{"tag":"1.5.3","author":"kokenet","date":"2026-08-26 10:40:42"},"1.5.4":{"tag":"1.5.4","author":"kokenet","date":"2026-07-03 11:19:01"}},"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","1.5.2","1.5.3","1.5.4"],"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.3<\/h4>\n\n<ul>\n<li>Changed: the Diagnostics page and the main settings header no longer show a red \"No disponible\" for Imagick (or its WebP support) when GD is active and already covers that function \u2014 it's now shown as a neutral \"opcional\" badge with a clear explanation, instead of looking like a failure<\/li>\n<li>Added: a clear top-of-page summary on both the Diagnostics page and the main settings screen stating plainly whether image optimization will work correctly, based on the actual detected capabilities (Imagick or GD, and WebP support via either)<\/li>\n<li>Added: distinct visual state (yellow\/neutral) for \"capability not present but a working fallback exists\", separate from \"OK\" (green) and \"real problem, nothing covers this\" (red)<\/li>\n<\/ul>\n\n<h4>1.5.2<\/h4>\n\n<ul>\n<li>Verified compatibility with WordPress 7.1. No functional change.<\/li>\n<\/ul>\n\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:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/319117","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=319117"}],"author":[{"embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kokenet"}],"wp:attachment":[{"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=319117"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=319117"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=319117"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=319117"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=319117"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=319117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}