=== Image Alt Sync === Contributors: dufour_l Tags: accessibility, images, alt text, seo, batch, wp-cli Requires at least: 5.4 Tested up to: 6.8 Stable tag: 1.4.11 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Replace tag alt attributes in posts with the alt stored in the media library. Batch processing, date/status filters, ID ranges, skip & exclude options, dry-run logs, and WP-CLI. A fast admin utility to review posts and **safely synchronize `` alt attributes** in post content with meaningful text (attachment alt, filename, post title, or a custom pattern). Includes batch processing, date/ID filters, dry‑run preview, and detailed logs. == Description == **Image Alt Sync** scans selected posts and updates any `` tags found in the post content that reference media items (class `wp-image-###`), and replaces their `alt` attributes with the attachment’s `_wp_attachment_image_alt` value: - If the image is in the Media Library, it prefers the attachment’s Alt Text. - If no attachment alt is set, it falls back to the image filename (without extension) or the post title (configurable in the UI). - Optionally skip images that aren’t found in the Media Library. - Optionally restrict by image file extensions (e.g. `jpg,webp`). Run in **dry run** first to see exactly what would change. The log shows each post processed and any per-image alt changes. **Highlights** - Processes **per post** in **batches** with a **customizable delay** (default 100 posts, 1s). - Filter by **post status** and **date range** (quick buttons: Today, Yesterday, Last week, Last month, YTD, All). - **Validate** that “Date after” ≤ “Date before”. - Limit by **Post ID range** with buttons to auto-fill **lowest** and **highest** post IDs. - **Skip posts without ``** (optional). - **Exclude image extensions** (comma-separated, e.g. `.svg,.gif`). - **Dry run** (browser & WP-CLI) shows clickable post IDs, post titles, **filenames**, and detailed **old → new** alt replacements. - Only processes posts that have at least one **image attachment**. For more details you can send mail with your suggestions, recommendation to dufour_l@hotmail.com == Installation == 1. Download the ZIP and install via **Plugins → Add New → Upload Plugin**. 2. Activate **Image Alt Sync**. 3. Go to **Tools → Image Alt Sync**. == Usage == 1. Choose your filters (date range, min/max post ID, or “Apply to all posts”). 2. Set **Batch size** and optional **Delay** between batches to throttle load. 3. Choose a **Date Range**, or click a shortcut button (autofills **Date after**/**Date before**). 4. (Optional) Enter **Lowest/Highest Post ID** or click the quick-fill buttons. 5. (Optional) Check **Skip posts without ``**. 6. (Optional) Enter **Exclude extensions** like `.svg,.gif`. 7. Optionally enable **Dry run** to preview changes without saving. 8. Click **Start**. Progress and detailed per-post changes appear in the log. 9. If needed, click **Stop** to pause after the current batch finishes. **Tips** - Use the “Lowest ID” and “Highest ID” buttons to auto-fill the ID range. - Use the extension filter (e.g. `jpg, jpeg, png, webp`) to target specific image types. - Check “Skip images not in media library” to avoid external or missing files. == Usage (WP-CLI) == From your WordPress root: `wp image-alt-sync run --status=publish --after=2025-01-01 --before=2025-08-13 --batch-size=100 --delay=1 --dry-run --low-id=1 --high-id=9999 --skip-noimg=1 --exclude-ext=".svg,.gif"` **Args** - `--status=` publish|pending|draft|any (default: publish) - `--after=` YYYY-MM-DD (optional) - `--before=` YYYY-MM-DD (optional) - `--batch-size=` integer (default: 100) - `--delay=` seconds (float, default: 1) - `--dry-run` flag (no changes saved if provided) - `--low-id=` minimum post ID (optional) - `--high-id=` maximum post ID (optional) - `--skip-noimg=` 1|0 (default 0) - `--exclude-ext=` comma-separated list like `.svg,.gif` == Frequently Asked Questions == = Will it update the Media Library alt text? = No. This tool updates `` **inside post content**. It does not edit attachment fields. = Does Dry Run modify anything? = No changes are saved during Dry Run. You’ll only see a preview in the log. = Which `` tags are updated? = Tags containing a class `wp-image-###` so we can map to the attachment ID and read its media-library alt text. = Does it also change the media alt in the library? = No—this version focuses on replacing `alt` inside post content from the media library value. = What if an `` has no `alt`? = The plugin injects `alt="..."` based on the media alt. == Changelog == = 1.4.6 / 1.4.7 / 1.4.8 / 1.4.9 / 1.4.10 / 1.4.11 = - Fix: Code cleanup = 1.4.5 = - Added two new date button ( last 4 weeks, since first of the month ) = 1.4.4 = - Fix: Code cleanup = 1.4.2 / 1.4.3 = - Fix: Copyright sanitization. = 1.4.1 = - Fix: Ajax not working. - Add private to the post status - Tested in Wordpress 6.8.2 = 1.4 = - Fix: Eliminated `[object Object]` messages by robust JSON/error-string logging. - Improvement: Processing now **continues** when a post/batch fails; errors are reported in the log. - Security: Added nonce checks to all AJAX endpoints. - DX: Structured JavaScript in a separate file and passed `ajaxurl`/`nonce` via `wp_localize_script`. - UI: Clearer batch progress messages and safer scrolling of the log. = 1.3 = - Restored the v1.1 UI while keeping the v1.2 functionality and enhancements. - Post ID range quick-fill buttons; dry run shows filenames and detailed changes. - Maintains batching, delay, status/date filters, and WP-CLI parity. = 1.2 = - Replace `alt` inside `` tags using media alt; added ID ranges, skip & exclude options. = 1.1 = - Batch processing; status/date filters; dry run logging; WP-CLI support. == Upgrade Notice == = 1.3 = Same sleek UI as 1.1 with all the newer capabilities from 1.2. == Credits == Crafted with ❤️ for accessible content.