| 开发者 | australcode |
|---|---|
| 更新时间 | 2026年8月16日 03:58 |
| PHP版本: | 8.2 及以上 |
| WordPress版本: | 7.0 |
| 版权: | GPL-2.0-or-later |
| 版权网址: | 版权信息 |
<picture> element. The result: same size product images across your whole shop — resize product images without cropping and regenerate product thumbnails in bulk, with no catalog limit.
Key differentiators
IMG_4832.jpg. Image SEO reads the WooCommerce product title, category and brand and writes real alt text: "Vape Pod XYZ — Pods, Brand Z". Automatic on every new upload, free, no AI and no API calls. It never overwrites alt text you wrote yourself.<picture> markup — multi-source with AVIF + WebP + JPEG fallback. Survives any page cache (LiteSpeed, WP Rocket, Cloudflare APO, W3 Total Cache) because it does not use Vary: Accept. The browser picks the optimal format; the cache serves HTML without negotiation.custom_order_tables and cart_checkout_blocks compatibility without any setup./cdn-cgi/image/format=auto) with automatic availability detection on your zone. If CIT is not enabled on your CF plan, the plugin keeps serving local derivatives without breaking anything.oom, missing_original, engine_failed, fs_permission), scope filters (auto = products only based on Settings; all-used = every image referenced in posts/products/Bricks templates/terms).wp acimg health, stats, regenerate, derivatives <id>, purge-cache (orphans; --stale/--all require Pro), restore-originals, migrate-from-sir. 2 Pro: wp acimg doctor (extended diagnostics) and wp acimg reset (full state reset).<img> with CIT URLs (/cdn-cgi/image/format=auto) instead of local derivatives when CIT is enabled on your zone. Defensive automatic fallback to the normal path if CIT is unavailable.wp_termmeta, WooCommerce shortcodes, custom meta. Trash mode with typed confirmation, immutable audit log, and an untrash endpoint for rollback.gpt-4o-mini) or Anthropic Vision (claude-haiku-4-5). Bring Your Own Key (no Merchant of Record over AI costs). Context enrichment with WooCommerce product title + category + brand. Complements Image SEO rather than replacing it: use it on the photos where the product name doesn't describe the picture.fetchpriority="high" and propagates correct loading/decoding to the final <picture>. Native LCP optimization.wp_get_attachment_image and optional output buffer rewriter for themes/page builders that bypass that filter.data-src/data-sizes lazy loaders (reads both if present).<picture> element, cache-safe by design — AVIF + WebP + JPEG fallback served without Vary: Accept, so it survives any HTTP page cache (LiteSpeed, WP Rocket, Cloudflare APO, W3 Total Cache). The browser picks the format; the cache serves one HTML.wp_get_registered_image_subsizes() and respects the WC thumbnail-cropping setting, so it targets exactly the product sizes your theme uses.wp plugin install australcode-uniform-images --activate
wp acimg health # verify everything is OK
wp acimg regenerate # bulk dry-run
wp acimg regenerate --start --yes # starts bulk in the background
wp acimg reset --yes # Pro: wipe all plugin state (tables, options, dirs) without deactivating
The wp acimg reset command (Pro) clears every persisted artifact — the 6 custom tables, options, post meta, transients and derivative directories — without deactivating the plugin. It's destructive and defaults to an interactive confirm; pass --yes to skip it. Useful to start from a clean slate when re-testing settings or migrating.No. Image SEO writes the alt text, title and caption attributes — it does not touch filenames. Renaming a file after upload means rewriting every URL that already points at it, and getting that wrong breaks live product pages. If file renaming is what you're after, this is not the plugin for it.
Image SEO reads your WooCommerce product data — title, category, brand — and builds the alt text from a template. It's instant, free, deterministic, and runs on every upload. AI alt text (Pro) looks at the image itself and describes what it sees, using your own OpenAI or Anthropic key at a fraction of a cent per image. Most stores run Image SEO on everything and AI only on the images where the product name doesn't describe the picture — a lifestyle shot, a detail close-up, a size comparison. They write the same field, so neither runs automatically on top of the other, and neither overwrites alt text you wrote yourself.
No. The automatic path only writes where the field is empty. The plugin also records what it generated, so if you edit an alt text by hand afterwards it's locked — no automatic pass will touch it again. The only way anything gets overwritten is if you click the button on that specific image yourself, or explicitly pick the "replace existing" option on a bulk run.
Because they aren't attached to a product. Image SEO builds the text from the product title, category and brand — a logo, a banner or a blog image has no product to read from, so the plugin writes nothing rather than inventing something. The Dashboard counter reflects this: it reports how many images it can actually fill, not how many are missing alt text.
Yes. Compatibility with custom_order_tables and cart_checkout_blocks is declared from day one via before_woocommerce_init. No manual configuration required.
Yes, and well. The plugin emits <picture> with <source> per MIME type — it survives Cloudflare APO and any page cache perfectly because it does NOT use Vary: Accept (which would break caching).
If you have Cloudflare Pro+, you can enable Image Transformations from Settings → CDN edge. The plugin automatically detects whether CIT is available on your zone and emits /cdn-cgi/image/ URLs that CF transforms on-demand with format=auto.
Caution with Cloudflare Polish: if active, it re-compresses the AVIF/WebP that the plugin already optimized — double compression equals visual artifacts. The plugin detects this on the Health page and alerts you with an admin notice. Recommendation: disable Polish, keep APO.
Imagick (preferred) with libheif for AVIF. GD as fallback. libvips is wired in the code but requires bundled binaries (not included in v0.x — future sprint). The active engine and its capabilities (read/write per format) appear on Health → Image engines.
Imagick compiled with libheif (common on modern hosts: Kinsta, WP Engine, SiteGround, recent Cloudways). If Imagick does not support AVIF, the plugin still emits WebP + JPEG and the Health page reports the limitation. You do not get stuck without anything — you just lose the most efficient format.
Estimate: ~700 KB of derivatives on average per original image at Standard preset (varies a lot by content type — product photos with a uniform background compress better). For a catalog of 1,000 products with one image each, that's ~700 MB of derivatives. By default the plugin never modifies your originals — derivatives are separate files, so you need space for original + derivatives. The only exception is the optional "apply trim to original" setting (off by default), which backs up the pristine file first and is reversible with wp acimg restore-originals.
Change settings on Australcode Image → Settings, save (the plugin shows a modal warning you that existing derivatives are invalidated), and then go to Bulk regenerate or run wp acimg regenerate --start --yes. The plugin keeps serving the old derivatives until regeneration completes — zero visual downtime.
Yes, disable those plugins before installing Australcode Uniform Images. The Health → Doctor page detects them and alerts you. The typical conflict is that those plugins also hook into wp_get_attachment_image and rewrite the HTML — the output ends up inconsistent.
Yes, 9 commands under wp acimg <subcommand>. Seven are free: health (CI smoke test), stats, regenerate, derivatives , purge-cache, restore-originals, and migrate-from-sir. Two require a Pro license: doctor (extended diagnostics) and reset (resets all persisted state without deactivating). Each command supports --format=json. wp help acimg lists them all.
Open a support thread in the WordPress.org plugin support forum — the plugin menu links straight to it. For Pro license-related issues, use the "Contact Us" screen in the plugin menu, or email info@australcode.io.
<img> the plugin serves was not declaring its width and height, so the browser had no shape to reserve and themes that impose no aspect ratio of their own drew the image at whatever height the slot allowed — a square product image could render as a tall strip. Themes that set their own aspect ratio were masking it, which is why it only showed on some sites. The image now declares the dimensions of the file it actually serves. Safe in-place upgrade — no regeneration, no settings change.srcset still listed WordPress' original crops instead of the uniform ones the plugin generates, so a browser could pick a file whose proportions contradicted the image it belonged to.<picture> wrapper the plugin adds was invisible to your theme's CSS, so the height your theme sets on an image was measured against the wrapper instead of the card it sits in. The wrapper now behaves like the image it replaces.acimg-picture), so your theme can style it directly. If your theme already worked around this, your own styling still wins over the plugin's.alt="", aria-hidden or role when served as <picture>. The rewrite kept only a fixed list of attributes and dropped empty values, so a decorative image marked alt="" reached the browser without it — screen readers announced the filename instead of skipping the image. Every attribute your theme sets is now passed through untouched.auto token to the sizes of lazy images that is meant for the <img> tag only; the plugin was copying it into the <source> elements of the <picture>, where it made the browser resolve the wrong shape. The <img> keeps the token, the <source> copies no longer do — no settings change and no regeneration needed.es_ES and es_CL, 100% coverage). WordPress picks your site language automatically.wp acimg migrate-from-sir is now free — import your Smart Image Resize settings (background color, trim, sizes) into Australcode with one command. Makes switching effortless._fl_builder_data) and Oxygen (ct_builder_shortcodes). The detection now combines two strategies per builder: structured ID extraction (precise for Bricks/Elementor) and a universal URL scan of the builder's stored markup (covers Beaver, Oxygen, and any builder that embeds the image URL). Divi/WPBakery remain covered via post_content._bricks_page_content, _elementor_data), outside post_content, so previous versions never found or optimized them. Divi was already covered (it stores in post_content). The frontend delivery already handled any <img> from any builder; this closes the generation side.api.lemonsqueezy.com, api.openai.com, api.anthropic.com, api.cloudflare.com) as full URLs. WP.org's review scanner pings every URL in the readme and flagged the Lemon Squeezy endpoint as a broken Terms/Privacy URL. Endpoints are now declared as host + path (not full clickable URLs); Terms/Privacy links remain and resolve.OutputBufferHook (opt-in feature, off by default) now closes its ob_start() buffer explicitly on shutdown, guarded by ob_get_level(). Same rewritten output, paired open/close as WP.org guidelines expect. WP 6.5+ compatible.