Skip to content

feat(acf): ACF deepening, plugin-wide translation features, settings UI (v1.11.0)#14

Merged
slydlake merged 1 commit into
mainfrom
feat/acf-deepening
Jun 13, 2026
Merged

feat(acf): ACF deepening, plugin-wide translation features, settings UI (v1.11.0)#14
slydlake merged 1 commit into
mainfrom
feat/acf-deepening

Conversation

@slydlake

Copy link
Copy Markdown
Contributor

Summary

Implements v1.11.0, building on v1.10.0's zero-config ACF support (#10):

ACF deepening (acf-vertiefung-plan.md)

  • Shared AcfFieldIntrospector (ACF resolvers become thin consumers)
  • AcfBlockTranslator for ACF blocks in Gutenberg (acf/* block-comment JSON, incl. repeater/group sub-keys)
  • AcfOptionsTranslationService + new ability ai-translate/translate-options
  • Structured field types: ACF link translates only title (slytranslate_meta_value_translation_spec)
  • Meta Box and Pods field resolvers
  • slytranslate_meta_keys_exclude option + per-field ACF "Exclude from AI translation" toggle
  • MetaTranslationService::describe_effective_meta_keys()

Plugin-wide features (plugin-features-plan.md, B8-B15)

  • Taxonomy-term translation (opt-in) + ai-translate/translate-terms
  • Image alt-text translation (incl. Polylang media duplication)
  • Opt-in slug translation for new translations
  • TranslationQueue: background bulk jobs (Action Scheduler / WP-Cron), job_id support for bulk/progress/cancel
  • Auto-translate on publish (consumes the previously-dead slytranslate_new_post option)
  • Glossary / do-not-translate list
  • Diff-based retranslation via shared TranslationFingerprint
  • New readonly ability ai-translate/get-translatable-fields

Settings UI (settings-ui-plan.md, phases 1-4)

  • New admin page Settings -> SlyTranslate: status row, model picker, prompt add-on, glossary editor, meta-field exclusion list with per-post preview, automation toggles, collapsed Advanced section
  • Saves through the existing ConfigurationService::save() path; new REST route ai-translate/probe-string-table-concurrency/run
  • Supersedes the earlier settings-page draft in feat(settings): admin settings page (Settings → SlyTranslate) + REST backend #12 (closed in favor of this more complete implementation)

Version bumped to 1.11.0; CHANGELOG/readme/changelog.txt and German (de_DE) translations updated.

Test plan

  • composer test — 590 tests, 3174 assertions, all passing (8 skipped, 1 deprecation, both pre-existing)

…UI (v1.11.0)

ACF (acf-vertiefung-plan.md):
- New AcfFieldIntrospector shared by all ACF resolvers (AcfMetaResolver
  becomes a thin consumer; slytranslate_acf_translatable_field_types
  filter unchanged)
- AcfBlockTranslator translates field data stored in acf/* Gutenberg
  block-comment JSON (attrs.data), including repeater/group sub-keys;
  client workflow exposes these as acf_block:{path}:{key} units
- AcfOptionsTranslationService + new MCP ability
  ai-translate/translate-options for ACF options-page fields
  (WPGlobus/WP Multilang inline merge, Polylang via
  slytranslate_acf_options_post_id filter, TranslatePress not_required)
- Structured field types: ACF link fields translate only the title
  sub-key (slytranslate_meta_value_translation_spec filter)
- Meta Box and Pods resolvers (metabox.io / Pods field registries)
- New slytranslate_meta_keys_exclude option + per-field
  "Exclude from AI translation" ACF toggle (slytranslate_exclude)
- MetaTranslationService::describe_effective_meta_keys() reports every
  effective meta key with source/type/exclusion state

Plugin-wide features (plugin-features-plan.md, B8-B15):
- Taxonomy-term translation (opt-in translate_terms) + bulk MCP ability
  ai-translate/translate-terms
- Image alt texts translated by default, incl. Polylang media
  duplication (alt/caption/description)
- Opt-in slug translation (translate_slugs) for newly created
  translations
- TranslationQueue: background bulk jobs via Action Scheduler or
  WP-Cron, one post per action; translate-content-bulk/get-progress/
  cancel-translation gain job_id support
- Auto-translate on publish (consumes the previously unused
  slytranslate_new_post option), queues draft translations with a
  _slytranslate_generated loop guard
- Glossary / do-not-translate list (slytranslate_glossary) injected
  into prompts
- Diff-based retranslation via shared TranslationFingerprint helper
  (_slytranslate_unit_hashes / _slytranslate_meta_hashes)
- New readonly MCP ability ai-translate/get-translatable-fields

Settings UI (settings-ui-plan.md, phases 1-4):
- Admin page (Settings -> SlyTranslate): status row, model picker,
  prompt add-on, glossary editor, meta-field list with per-key
  exclusion checkboxes and per-post preview, automation toggles, and a
  collapsed Advanced section (prompt template, context window,
  direct-API URL + probe, string-table concurrency probe, transport
  diagnostics)
- Saves through the existing ConfigurationService::save() path (same
  as MCP configure); new REST route
  ai-translate/probe-string-table-concurrency/run
- German (de_DE) translations for the settings page and ACF toggle

Bump plugin version to 1.11.0, regenerate language files, update
CHANGELOG/readme.
@slydlake slydlake merged commit 09888df into main Jun 13, 2026
23 checks passed
@slydlake slydlake deleted the feat/acf-deepening branch June 13, 2026 22:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant