{"id":34250398,"url":"https://github.com/antoninp/ap-library","last_synced_at":"2026-04-20T08:31:05.219Z","repository":{"id":326606924,"uuid":"1004169843","full_name":"antoninp/ap-library","owner":"antoninp","description":"Wordpress Photo Library Plugin for photography website built around a custom post type for photos, date metadata, hierarchical taken date archives, EXIF extraction, keyword extraction, and admin tools.","archived":false,"fork":false,"pushed_at":"2025-12-15T08:18:26.000Z","size":388,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-19T19:14:28.493Z","etag":null,"topics":["archive","custom-post-type","exif","gallery","keywords","media","photography","taxonomy","wordpress","wordpress-plugin"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/antoninp.png","metadata":{"files":{"readme":"README.txt","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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-06-18T08:13:25.000Z","updated_at":"2025-12-15T08:18:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/antoninp/ap-library","commit_stats":null,"previous_names":["antoninp/ap-library"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/antoninp/ap-library","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antoninp%2Fap-library","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antoninp%2Fap-library/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antoninp%2Fap-library/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antoninp%2Fap-library/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/antoninp","download_url":"https://codeload.github.com/antoninp/ap-library/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antoninp%2Fap-library/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32039887,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T00:18:06.643Z","status":"online","status_checked_at":"2026-04-20T02:00:06.527Z","response_time":94,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["archive","custom-post-type","exif","gallery","keywords","media","photography","taxonomy","wordpress","wordpress-plugin"],"created_at":"2025-12-16T09:19:54.922Z","updated_at":"2026-04-20T08:31:05.208Z","avatar_url":"https://github.com/antoninp.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"=== AP Library ===\nContributors: Antonin Puleo\nDonate link: https://antoninpuleo.com/\nTags: photography, media, uploads, custom post type, taxonomy, exif, gallery, archive, dates, keywords\nRequires at least: 6.5\nTested up to: 6.8.3\nRequires PHP: 7.4\nStable tag: 1.3.3\nLicense: GPLv2 or later\nLicense URI: https://www.gnu.org/licenses/gpl-2.0.html\n\nPhoto Library system for WordPress built around a custom post type for photos, date metadata, hierarchical taken date archives, EXIF extraction, keyword extraction, and admin tools.\n\n== Description ==\n\nAP Library provides a robust foundation to manage a photography library as first-class posts. It defines:\n\n- Custom Post Type: `aplb_photo` for photos\n- Meta fields: `aplb_published_date`, `aplb_taken_date` (ISO 8601: `YYYY-MM-DD`)\n- Taxonomies:\n    - `aplb_published_date` (flat) for published date groupings\n    - `aplb_taken_date` (hierarchical) for taken date — Year → Month → Day — enabling clean archives like `/photo-taken/2023/november/15/`\n    - `aplb_location` (hierarchical) for location — Country → State/Province → City — extracted from photo IPTC metadata\n    - `aplb_genre` (hierarchical) for your own logical groupings (optional)\n    - `aplb_keyword` (flat) for IPTC/EXIF photo keywords automatically extracted from featured images\n- EXIF integration to extract taken dates, locations, and IPTC keywords from featured images (creates matching taxonomy terms automatically)\n- Admin UI enhancements (meta box, quick edit integration, sortable columns)\n- Backfill tools to sync existing content\n- Query customization so archives order by `aplb_published_date` by default\n\n== Archive Rules ==\n\nSince 1.2.x you can configure how taxonomy / post type / author / date archives build their main query instead of relying on hard‑coded logic.\n\nNavigate to: Photos → Archive Rules.\n\nFor each archive context you can:\n* Enable or disable the rule (when disabled, WordPress default behavior applies)\n* Set Post Types included (currently only `aplb_photo`)\n* Choose Order By: Meta Value, Post Date, Title, or Menu Order\n* Specify Meta Key (used only when ordering by Meta Value; defaults to `aplb_published_date`)\n* Set Order direction (ASC / DESC)\n* Configure Posts Per Page (leave empty for WP default, use -1 for all posts)\n\nManaged contexts:\n* Genre taxonomy: `aplb_genre`\n* Taken date taxonomy: `aplb_taken_date`\n* Published date taxonomy: `aplb_published_date`\n* Location taxonomy: `aplb_location`\n* Keyword taxonomy: `aplb_keyword`\n* Photos post type archive\n* Author archives\n* Date archives (year / month / day)\n* Search results\n* Front page (when set to show posts)\n\nThe rules are applied via `pre_get_posts` to the main query. Any Query Loop block set to inherit the URL query will automatically reflect updates. Leaving Meta Key empty while using Meta Value ordering falls back to the default published date meta key.\n\nChanging included post types may hide posts not assigned to the selected types within a taxonomy term—ensure term assignments are consistent if you expect mixed results.\n\n== Installation ==\n\n1. Upload the `ap-library` folder to `/wp-content/plugins/`.\n2. Activate \"AP Library\" in the Plugins screen.\n3. (Optional) Flush permalinks (Settings → Permalinks → Save) to enable location taxonomy archives.\n4. (Optional) Run the Backfill tool to populate taxonomy terms from existing meta values, generate keywords, and extract location data from IPTC metadata.\n\n== Frequently Asked Questions ==\n\n= Where do taken and published dates live? =\nTwo custom meta keys are used on `aplb_photo` posts: `aplb_taken_date` and `aplb_published_date`.\n\n= How are dates turned into taxonomy archives? =\nDates are synchronized one-way from meta to taxonomy. Taken dates create a Year → Month → Day hierarchy in `aplb_taken_date`. Published date uses a flat term in `aplb_published_date`.\n\n= Does it read EXIF automatically? =\nYes. On save and during upload processing the plugin attempts to read DateTimeOriginal from the featured image. If missing, you can still set dates manually.\n\n= How are keywords extracted and assigned? =\nKeywords are automatically extracted from IPTC metadata (field 2#025) embedded in featured images. The plugin uses case-insensitive matching, so \"Australia\" and \"australia\" map to the same term with a consistent title-case display name. Keywords are assigned during upload and can be backfilled for existing content.\n\n= How is location data extracted? =\nLocation information is extracted from IPTC metadata fields embedded in photos: City/Sublocation (2#092, 2#090), Province/State (2#095), and Country/Primary Location (2#101). The plugin creates a hierarchical taxonomy (Country → State → City) and can backfill existing photos. Location terms are optional; photos without location metadata are unaffected.\n\n== Screenshots ==\n\n1. Photos list with date columns and quick edit.\n2. Taken date taxonomy archive (Year → Month → Day).\n\n== Navigation ==\n\nAfter activation you will find plugin tools under the Photos post type menu:\n- Photos → Library Overview (quick actions, status, general settings)\n- Photos → Backfill (regenerate taken/published dates, keywords, and location)\n- Photos → Archive Rules (configure ordering \u0026 enable/disable archive contexts)\n\n== Bulk Genre Assignment ==\n\nOn the Photos list screen (`edit.php?post_type=aplb_photo`) a \"Bulk Genres\" toolbar lets you assign one or more Genre taxonomy terms (`aplb_genre`) to multiple photo posts without page reloads.\n\nWorkflow:\n1. Tick the checkboxes of the photos you want to update (thumbnails are visible in the list for visual confirmation).\n2. Select one or more genres in the multi‑select box.\n3. (Optional) Toggle \"Replace existing genres\" if you want to overwrite instead of add.\n4. Click \"Apply Genres to Selected\".\n\nModes:\n* Add (default): Selected genres are merged with any existing genres on each photo (duplicates suppressed).\n* Replace: Existing genres for each selected photo are discarded and replaced with only the selected genres.\n\nThe update runs through an internal REST endpoint (`/wp-json/ap-library/v1/assign-genres`). A success message appears and each affected row's Genre column is updated immediately—no full page refresh required.\n\nNotes:\n* You must have capability to edit the selected posts (standard `edit_post`).\n* The toolbar only appears on the `aplb_photo` list screen.\n* At least one post and one genre must be selected for the Apply button to enable.\n* If a request fails, an inline error message is shown; retry after checking connectivity or nonce validity.\n\nThis feature significantly reduces repetitive Quick Edit steps when tagging batches of newly created photo posts prior to publishing.\n\n== Bulk Date Tools ==\n\nOn the Photos list screen (`edit.php?post_type=aplb_photo`) unified date toolbars let you batch update photo dates without page reloads:\n\n**Bulk Post Date Toolbar**: Update WordPress post dates (published and modified) for multiple photos.\n**Bulk Published Date Toolbar**: Update the custom `aplb_published_date` meta field and synchronize to the `aplb_published_date` taxonomy.\n**Bulk Taken Date Toolbar**: Update the custom `aplb_taken_date` meta field and synchronize to the hierarchical `aplb_taken_date` taxonomy.\n\nWorkflow:\n1. Tick the checkboxes of the photos you want to update.\n2. Select a new date using the date picker.\n3. Click \"Apply [Date Type]\" to update all selected photos.\n4. A success message confirms the update and date columns refresh immediately.\n\nFeatures:\n* Post date updates (publish/modify) synchronize with taxonomy date fields automatically.\n* Visual indicator (clock icon with timestamp) shows when dates were last updated.\n* Bulk updates respect user capabilities (`edit_post`).\n* All updates run through the REST endpoint (`/wp-json/ap-library/v1/update-dates`).\n* Taxonomy terms are created automatically if they do not exist.\n\n== Bulk Portfolio Assignment ==\n\nOn the Photos list screen, a \"Bulk Portfolios\" toolbar lets you assign one or more Portfolio taxonomy terms (`aplb_portfolio`) to multiple photo posts.\n\nWorkflow:\n1. Tick the checkboxes of the photos you want to update.\n2. Select one or more portfolios in the multi‑select box.\n3. (Optional) Toggle \"Replace existing portfolios\" if you want to overwrite instead of add.\n4. Click \"Apply Portfolios to Selected\".\n\nModes:\n* Add (default): Selected portfolios are merged with any existing portfolios on each photo (duplicates suppressed).\n* Replace: Existing portfolios for each selected photo are discarded and replaced with only the selected portfolios.\n\nThe update runs through an internal REST endpoint (`/wp-json/ap-library/v1/assign-portfolios`). A success message appears and each affected row's Portfolio column is updated immediately.\n\n== Filtering by Location ==\n\nOn the Photos list screen, a dropdown filter allows you to filter photos by location taxonomy terms (`aplb_location`). Select any location (Country, State, or City) to display only photos assigned to that location.\n\nThis is helpful when:\n* Reviewing photos from a specific region or destination.\n* Organizing photo collections by geography.\n* Verifying location assignments extracted from IPTC metadata.\n\n== Photo Post Creation Filters ==\n\nTo prevent non-photograph images (logos, icons, banners, UI graphics) from being converted to photo posts, the \"Create Missing Photo Posts\" action applies intelligent filtering.\n\nConfigurable filters (Photos → Library Overview → Photo Post Creation Filters):\n\n**Filename Exclusions**: Images with these keywords in their filename are skipped. Default keywords include: `logo`, `banner`, `icon`, `avatar`, `profile`, `thumbnail`, `thumb`, `background`, `header`, `footer`, `placeholder`, `default`, `button`, `badge`, `sprite`, `ui`, `favicon`, `symbol`, `graphic`, `decoration`.\n\n**Minimum Dimensions**: Images smaller than the specified width or height (in pixels) are excluded. Default: 400×400px. Set to 0 to disable.\n\n**Minimum File Size**: Images smaller than the specified file size (in KB) are excluded. Default: 50KB. Set to 0 to disable. Small file sizes often indicate logos or icons rather than photographs.\n\n**Extension Exclusions**: SVG and GIF files are always excluded regardless of other settings.\n\nAll filters are applied when running the \"Create Missing Photo Posts\" quick action. Filters do not affect manual photo post creation or auto-creation on upload. You can customize all thresholds and keywords through the settings interface.\n\nTypical exclusion scenarios:\n* Logo files: Caught by filename keyword \"logo\"\n* Small icons: Caught by dimension filter (\u003c 400px)\n* Tiny graphics: Caught by file size filter (\u003c 50KB)\n* UI elements: Caught by keywords like \"button\", \"badge\", \"ui\"\n* Social media graphics: Often caught by dimension ratios or keywords like \"banner\", \"header\"\n\n== Changelog ==\n\n= 1.3.3 - Simplified photo post content =\n- Removed: Photo post HTML gallery content generation on photo creation. Photos now display featured image only without additional gallery markup or styling.\n- Removed: Gallery-related CSS rules and JavaScript handlers for Meow Gallery gallery blocks.\n- Removed: Smooth scroll behavior from global CSS.\n- Added: GitHub Actions release workflow to automatically package plugin for distribution without version numbers in folder name.\n\n= 1.3.2 - Location Taxonomy, Bulk Date Tools, Date Sync Fix =\n- Added: Location taxonomy (`aplb_location`) with hierarchical structure (Country → State/Province → City) extracted from photo IPTC metadata.\n- Added: Automatic location term extraction and assignment from featured image IPTC fields (Country, State, Sublocation, City).\n- Added: Bulk post date toolbar for batch updating post dates (publish/modified dates) on Photos list screen.\n- Added: Unified bulk date toolbar combining post date, published date, and taken date updates via REST endpoint `/ap-library/v1/update-dates`.\n- Added: Visual indicator (clock icon with timestamp) showing when photo dates were last updated.\n- Added: Filter Photos list by taxonomy terms via dropdowns.\n- Added: Archive Rules context for location taxonomy (`tax:aplb_location`) with auto-configuration.\n- Updated: Location taxonomy included in Archive Rules configuration UI.\n- Updated: Backfill tool now supports location term generation from IPTC metadata.\n- Fixed: Meta key and taxonomy date terms not synchronizing when dates updated via bulk date toolbar.\n- Developer Notes: New EXIF methods `get_location()` and `get_location_from_post()` (@since 1.3.2) extract location from photo metadata; new REST endpoint handles bulk date updates; location backfill method `process_location_backfill()` (@since 1.3.2) available on Backfill page.\n\n= 1.3.1 - Portfolio Support, Unified Bulk Tools, Date Format Setting =\n- Added: Portfolio taxonomy (`aplb_portfolio`) for curated photo collections (hierarchical \u0026 REST-enabled).\n- Added: Portfolio cover image term meta with media uploader on add/edit screens.\n- Added: Bulk portfolio assignment toolbar (Add / Replace) via REST endpoint `/ap-library/v1/assign-portfolios`.\n- Added: Unified bulk assignment script `ap-library-bulk-assign.js` for genres \u0026 portfolios (replaces genre-only script).\n- Added: Auto-clearing of selected photo checkboxes and replace checkbox after successful bulk assignment.\n- Added: Global date format setting (Photos → Library Overview) applied to list columns and newly created date taxonomy terms.\n- Added: Custom column order (thumbnail, title, genre, portfolio, keyword, taken date tax, published date tax, author, post date, taken meta, published meta).\n- Updated: Archive Rules now include portfolio taxonomy context (`tax:aplb_portfolio`).\n- Updated: Bulk assignment UI order (Genre toolbar appears left of Portfolio for faster access).\n- Updated: Date taxonomy term creation respects chosen date format for day-level terms.\n- Updated: Settings label clarifies global impact of date format selection.\n- Updated: REST localization consolidated into unified config objects for both taxonomies.\n- Removed: Legacy script `ap-library-bulk-genres.js` replaced by unified `ap-library-bulk-assign.js`.\n- Removed: Automatic default \"All\" genre assignment on photo creation for author control.\n- Fixed: Missing portfolio archive rule context registration.\n- Fixed: Genre/Portfolio columns not refreshing immediately after bulk operations.\n- Fixed: Replace-mode checkbox persisting checked state post-operation.\n- Fixed: Inconsistent date display (full month names) ignoring abbreviated preference.\n- Developer Notes: New class `Ap_Library_Portfolio` (@since 1.3.1) manages portfolio term meta; date format option `ap_library_date_format` (default `M j, Y`) does not retroactively rename existing terms.\n\n= 1.3.0 - Consolidated to Single Photo CPT (breaking changes) =\n- Added: Bulk genre assignment toolbar on Photos list screen with Add/Replace modes and REST API endpoint `/ap-library/v1/assign-genres`.\n- Added: Configurable photo post creation filters to exclude non-photographs (logos, icons, banners) based on filename keywords, dimensions (min width/height, default 400px), and file size (min KB, default 50KB).\n- Added: Smart filtering in \"Create Missing Photo Posts\" action for logos and UI graphics.\n- Added: Reset to Defaults button on Archive Rules page.\n- Added: Prominent warning on Backfill page about irreversible overwrite operations.\n- Updated: Renamed CPT from `aplb_uploads` → `aplb_photo` with archive base `photos`.\n- Updated: Renamed taxonomies to `aplb_taken_date`, `aplb_published_date`, `aplb_genre`, and `aplb_keyword` with updated rewrite bases.\n- Updated: Replaced \"AP Library\" submenu with \"Library Overview\" (slug: `aplb-overview`) as central hub for actions, status, and unified settings.\n- Updated: Normalized submenu slugs for consistency: `aplb-overview`, `aplb-backfill`, `aplb-archive-rules`.\n- Updated: Archive Rules UI reorganized with explanatory text above table.\n- Updated: Overview page settings combined into single Save button with enhanced Related Tools links.\n- Updated: Admin UI (menus, columns, bulk actions, meta box) and public query logic to new slugs.\n- Updated: All taxonomy associations now target `aplb_photo` only.\n- Updated: Simplified uninstall routine (only removes `aplb_photo` posts plus related taxonomies).\n- Updated: Documentation updated to reflect single CPT architecture.\n- Removed: Legacy `aplb_library` custom post type; all functionality now centers on the `aplb_photo` post type.\n- Removed: Admin actions and helper classes related to creating/updating library posts.\n- Removed: Deprecated Upload* stub classes/files after migration.\n- Breaking change: Existing content under the old `aplb_uploads` CPT and taxonomies will not appear until migrated. Use the Backfill tools to re-sync date/keyword terms from meta, and consider migrating post_type from `aplb_uploads` to `aplb_photo` if you have existing data. After upgrading, visit Settings → Permalinks and click Save to flush rewrite rules.\n\n= 1.2.1 - i18n and cleanup =\n- Updated: Normalized translation text domain to `ap-library` across the plugin for consistent i18n.\n- Updated: Regenerated POT file and added `X-Domain: ap-library` header.\n- Fixed: CPT labels to use the unified `ap-library` text domain.\n- Fixed: Corrected CPT ↔ taxonomy associations to use actual registered slugs.\n- Fixed: Uninstall routine now removes posts and terms for all AP Library CPTs/taxonomies and flushes rewrite rules.\n- Misc: Minor label consistency and internal cleanup.\n\n= 1.2.0 - Photo Keywords \u0026 Enhanced Date Backfill =\n- Added `aplb_uploads_keyword` taxonomy with automatic IPTC keyword extraction from featured images\n- Keywords are now automatically extracted and assigned during upload post creation\n- Implemented case-insensitive keyword matching with normalized slugs and title-case display names\n- Enhanced backfill UI: unified submenu with three separate operations (Taken Date, Published Date, Keywords)\n- Split date backfill into independent operations for taken dates and published dates\n- Improved hierarchical date term names for better human readability (e.g., \"May 2023\" instead of \"May\", \"May 15, 2023\" instead of \"15\")\n- Added EXIF keyword extraction methods: `get_keywords()` and `get_keywords_from_post()`\n- Keyword taxonomy hidden from Quick Edit to maintain consistency\n- All keyword operations respect case-insensitive matching (\"Australia\" and \"australia\" map to the same term)\n\n= 1.1.0 - Hierarchical taken date archives, EXIF, and sync improvements =\n- Introduced hierarchical taken date taxonomy `aplb_uploads_tdate` (Year → Month → Day) with clean archive URLs.\n- One-way synchronization from `aplb_taken_date` meta to hierarchical terms; `aplb_library_pdate` remains flat.\n- Backfill tool updated to generate and sync hierarchical date terms for existing uploads.\n- Admin columns and quick edit updated to edit dates and re-sync terms accordingly.\n- EXIF extraction prioritized to populate `aplb_taken_date` from featured image metadata when available.\n- Upload post creation streamlined: avoid duplicate term creation; set meta then trigger synchronization.\n- Archive query adjustments: ensure taxonomy archives use `aplb_uploads` post type and order by `aplb_published_date` (DESC).\n- UI refinement: date taxonomies hidden from Quick Edit to prevent conflicts with meta-driven sync.\n- General reliability fixes and internal logging during development (removed in release).\n\n= 1.0.0 - Initial Release =\n- Custom post type, date meta, base taxonomies, admin UI, and public hooks skeleton.\n\n== Upgrade Notice ==\n\n= 1.3.3 =\nThis release simplifies photo display by removing generated gallery content. Photos will now display only featured images without additional HTML or gallery-specific styling. No database migration required; existing posts remain intact.\n\n= 1.3.2 =\nThis release adds a new Location taxonomy with IPTC metadata extraction and unified bulk date tools. After upgrading:\n1. Flush permalinks (Settings → Permalinks → Save) to ensure location taxonomy archives resolve.\n2. (Optional) Run the Backfill tool (Photos → Backfill → Location) to extract location data from existing photo IPTC metadata.\n3. Use the new unified bulk date toolbar to batch update post dates, published dates, or taken dates.\n4. (Optional) Add the Location filter dropdown to your Photos list via custom columns if desired.\nNo database migration is required; existing posts and taxonomies remain intact. The location taxonomy is optional and backfill only affects photos with location data in their featured image IPTC fields.\n\n= 1.3.1 =\nThis release adds the Portfolio taxonomy, unified bulk assignment (genres + portfolios), and a global date format setting. After upgrading:\n1. Flush permalinks (Settings → Permalinks → Save) to ensure portfolio archives resolve.\n2. Visit Photos → Library Overview to choose a date format (default short) before creating new date terms.\n3. (Optional) Add portfolio cover images via the Portfolio taxonomy term edit screens.\n4. Use the new Bulk Portfolios toolbar to batch assign portfolios; verify column order updated.\nNo database migration is required; existing posts remain intact. Previously created date terms keep their original names.\n\n= 1.3.0 =\n**BREAKING CHANGES:** This release consolidates to a single photo CPT (`aplb_photo`) and renames post types/taxonomies. Existing content will not appear until migrated. After upgrading, visit Settings → Permalinks and click Save. Use Backfill tools to re-sync content. Review the changelog for full migration details.\n\n= 1.2.1 =\nNo action required. This release improves internationalization and uninstall cleanup. Uninstall now fully removes AP Library posts and taxonomy terms and flushes rewrites.\n\n= 1.2.0 =\nThis release adds automatic keyword extraction from IPTC metadata and separate backfill operations for taken/published dates. Run the backfill tools (Taken Date, Published Date, and Keywords) to populate taxonomy terms for existing content.\n\n= 1.1.0 =\nThis release adds hierarchical taken date archives, EXIF-based date extraction, and improved meta→taxonomy synchronization. Run the Backfill tool to synchronize existing content.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantoninp%2Fap-library","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fantoninp%2Fap-library","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantoninp%2Fap-library/lists"}