Documentation

AbstractSyncPlugin extends AbstractLanguagePlugin
in package
uses SyncFromExternalSourceTrait

AbstractYes

There are plugins like WPML or PolyLang which allows you to create a multilingual WordPress installation. devowl.io plugins needs to be compatible with those plugins so this abstract implementation handles actions like get original ID and get default language.

Table of Contents

Constants

MARKER_SPLIT_TRANSLATION_ENTRY  : mixed = 'splitTranslationEntry'
TEMPORARY_TEXT_DOMAIN_PREFIX  : mixed = 'multilingual-temporary-text-domain'

Properties

$copyToOtherLanguageMap  : mixed
`copyTermToOtherLanguage` and `copyPostToOtherLanguage` create a duplicate of a term and post. This map holds the mapping of original-ID to translation-ID. This map is filled with the translations like this:
$currentTranslationEntries  : mixed
Current translations hold as an instance.
$findI18nKeyOfTranslationCache  : mixed
$lockCurrentTranslations  : mixed
$splitTranslationEntriesCache  : SplObjectStorage<Translation_Entry, array<string|int, Translation_Entry>>
Cache for split translation entries.
$taxonomySourceResolutionExcludePostId  : int|null
During `syncPostFromExternalSource()`, the duplicate post id excluded from WPML taxonomy sibling fallback (the in-progress translation must not supply term assignments as source).
$translateArrayCache  : mixed
$applyingExternalSourceSync  : mixed
True while `syncPostFromExternalSource()` / `syncTermFromExternalSource()` write target fields. Suppresses live `updated_*_meta` fan-out in `Sync` for those writes.
$postTaxonomyCopyingInProgress  : mixed
Set while `assignTranslatedPostTerms()` calls `wp_set_object_terms()`.
$postTaxonomyCopyTargets  : array<int, array{sourceLocale: string, taxonomies: string[], to: array}>
Master post id => { sourceLocale, taxonomies, to: locale => translation post id }.
$postTaxonomySetObjectTermsHookRegistered  : mixed
Ensures exactly one `set_object_terms` hook exists for the whole request.

Methods

__construct()  : mixed
C'tor.
copyPostTaxonomies()  : mixed
Copy already existing taxonomies as it can be inserted with `tax_input` directly.
copyPostToOtherLanguage()  : int|bool
Translate given post to other language.
copyTermToOtherLanguage()  : int|bool
Translate given term to other language.
createTemporaryTextDomain()  : mixed
Create a temporary text domain.
determineImplementation()  : AbstractLanguagePlugin
Determine implementation class.
disableCopyAndSync()  : mixed
Disable sync mechanism of our language plugin as it is handled by `Sync.php`.
duplicatePostMeta()  : mixed
Copy already existing meta as it can be inserted with `meta_input` directly.
filterMetaValue()  : mixed
Apply a WordPress filter so a meta value can be modified for copy process to other languages.
filterWithExistingTranslatedTextDomain()  : mixed
Filter a list of locales and check if translations from a PO/MO file exists.
findI18nKeyOfTranslation()  : mixed
The same as `findI18nKeyOfTranslationRaw`, but with caching enabled as this could be called very often.
findI18nKeyOfTranslationRaw()  : mixed
Find an i18n key for `__()` from a given translated string.
getActiveCountriesFlags()  : mixed
Get the flags of all active languages.
getActiveLanguages()  : array<string|int, string>
Get all active languages.
getCountryFlag()  : string|false
Get a `src` compatible link to the country flag.
getCurrentLanguage()  : string
Get current language.
getCurrentLanguageFallback()  : mixed
Get current language or fallback to default language when the multilingual is in a state like "Show all languages" (option known in the admin toolbar).
getCurrentPostId()  : int
Get current id of passed post id and fallback to passed id, when no translation found.
getCurrentTermId()  : int
Get the term id for `$locale`; adapters fall back to `$id` when no translation exists.
getDefaultLanguage()  : string
Get default language.
getLanguageSwitcher()  : array<string|int, array<string|int, mixed>>
Get a language switcher for the current page.
getLocalesBeforeSwitch()  : mixed
List of locales before switching locale via `switchToLanguage`.
getObjectTermIdsForPostLanguage()  : array<string|int, int>
Term ids assigned to a post in a specific language context (avoids WPML read fallbacks).
getOriginalPostId()  : int
Get original id of passed post id.
getOriginalTermId()  : int
Get original id of passed term id.
getOverrideClassInstance()  : mixed
Get an instance of the `overrideClass`.
getPermalink()  : string
Get the URL of a given URL for another locale.
getPostLanguage()  : string
Get language of passed post id.
getPostTranslationIds()  : array<string|int, int>
Get all translations of a given post type.
getSkipHTMLForTag()  : string
Get the HTML attribute so the "dynamic" replacement gets disabled on frontend side. This can be useful for texts which are directly translated in PHP already and gets translated via JavaScript again.
getSync()  : mixed
Get `Sync` instance for this plugin. Can be `null` if not given.
getTaxonomyTranslationIds()  : array<string|int, int>
Get all translations of a given taxonomy.
getTemporaryTextDomainName()  : mixed
Get the current temporary text domain name which can be used for `__` when e.g. inside `switchToLanguage`.
getTermLanguage()  : string
Get language of passed term.
getTranslatedName()  : string
Get translated name for a given locale.
getWordPressCompatibleLanguageCode()  : string
Get the WordPress compatible language code of a given locale.
isActive()  : mixed
Is a multilingual plugin active?
isApplyingExternalSourceSync()  : mixed
Whether `Sync::updated_postmeta()` / `Sync::updated_term_meta()` should skip.
isCurrentlyInEditorPreview()  : bool
Check if the translate plugin is currently in edit mode (preview).
isExternalTranslationSyncDeferredForPost()  : mixed
Gate for `Sync::save_post()`: when `true`, Sync skips post sync for this write.
isExternalTranslationSyncDeferredForTerm()  : mixed
Gate for `Sync::created_term()`: when `true`, Sync skips term sync for this write.
iterateAllLanguagesContext()  : mixed
Iterate all language contexts.
iterateOtherLanguagesContext()  : mixed
Iterate all other languages than current one and get their context.
lockCurrentTranslations()  : mixed
Do not allow to take another snapshot of current translations.
matchLanguageCodeFromWordPressCompatibleLocale()  : mixed
Resolve the plugin language code (e.g. en, de) from a WordPress-compatible locale (e.g. en_US from {@see getWordPressCompatibleLanguageCode()}). Also accepts an already-short plugin code when it is listed in {@see getActiveLanguages()}.
maybePersistTranslation()  : mixed
Maybe persist a translation in the database of available translations.
onSetObjectTermsCopyPostTaxonomies()  : mixed
Copy taxonomy assignments from a master post to its translations when terms are set on the master.
postCopiedToAllOtherLanguages()  : mixed
This method is called due to `Sync::save_post`. It allows you to get a list of all translations of a post in an associate array.
remapPostId()  : int
Resolve a post id to its translation in `$locale`, if one should be stored on a translation post.
rest_prepare_post()  : mixed
Add a `multilingual` section to a given post type.
rest_prepare_taxonomy()  : mixed
Add a `multilingual` section to a given taxonomy.
setPostLanguage()  : mixed
This method is called due to `Sync::save_post`. It allows you to assign a post to a given language.
setSync()  : mixed
Set `Sync` instance for this plugin. Can be `null` if not given.
setTermLanguage()  : mixed
This method is called due to `Sync::created_term`. It allows you to assign a term to a given language.
snapshotCurrentTranslations()  : mixed
Snapshot the current translations.
splitTranslationEntries()  : mixed
Split a translation entry key into multiple parts. This is useful when using e.g. TranslatePress and we need to find translations from MO file which is divided into multiple "parts" like `<strong>Text</strong>: Another text`.
switch()  : mixed
Switch to a given language code. Please do not use this function directly, use `switchToLanguage` instead!
switchToLanguage()  : mixed
Open given language and get their context. Context = switch to the language.
syncPostFromExternalSource()  : mixed
Apply sync copy rules after an external plugin created a post translation: taxonomies + translated columns.
syncPostMetaFromExternalSource()  : mixed
Run configured post meta through `filterMetaValue()` on the target translation.
syncTermFromExternalSource()  : mixed
Apply sync copy (meta + term columns) after an external plugin created the translation.
syncTermMetaFromExternalSource()  : mixed
Copy configured term meta from the source translation after an external plugin created the target.
teardownTemporaryTextDomain()  : mixed
Teardown the known temporary text domain.
termCopiedToAllOtherLanguages()  : mixed
This method is called due to `Sync::created_term`. It allows you to get a list of all translations of a term in an associate array.
translatableStrings()  : array<string|int, array<string|int, string>>
Extract translatable strings from a given content. The returned array is a map of the original strings to the translatable strings.
translateArray()  : array<string|int, mixed>
Translate a complete array to a given locale (recursively). This is mostly implemented by output buffer plugins like TranslatePress or Weglot.
translateInput()  : mixed
Translate a given input from known translations (.po, .pot).
translateStrings()  : mixed
Translate strings to a given locale. Do not use this function directly, use `translateArray` instead!
unsetCurrentTranslations()  : mixed
Unset current translations.
withSourceTranslationCatalog()  : mixed
Run a callback with the source-language PO/MO catalog snapshotted (same as `CopyContent::copy`).
duplicateMeta()  : mixed
Listen to meta (term, post, ...) addition and copy.
duplicatePost()  : mixed
A simple `get_post` => `wp_insert_post` wrapper.
duplicateTerm()  : mixed
A simple `get_term` => `wp_insert_term` wrapper.
duplicateTermMeta()  : mixed
Listen to term meta addition and copy.
fetchObjectTermIdsWithoutFilters()  : array<string|int, int>
Read assigned term ids bypassing WPML `get_object_terms` filters.
resolveSourceTermsByTaxonomyForPostCopy()  : array<string, array<string|int, int>>
Taxonomy term ids assigned to the source post before remapping onto a translation.
translateStringFromMo()  : array<string|int, mixed>
Translate string from `.mo` file. Please consider to create a temporary text domain before!
whileApplyingExternalSourceSync()  : mixed
Run callback while external-source sync writes the target translation only (no live meta fan-out).
assignTranslatedPostTerms()  : mixed
Map source term ids to the target locale and assign them on a translation post.
fetchObjectTermIds()  : array<string|int, int>
Read taxonomy term ids currently assigned to a post.

Constants

MARKER_SPLIT_TRANSLATION_ENTRY

public mixed MARKER_SPLIT_TRANSLATION_ENTRY = 'splitTranslationEntry'

TEMPORARY_TEXT_DOMAIN_PREFIX

public mixed TEMPORARY_TEXT_DOMAIN_PREFIX = 'multilingual-temporary-text-domain'

Properties

$copyToOtherLanguageMap

`copyTermToOtherLanguage` and `copyPostToOtherLanguage` create a duplicate of a term and post. This map holds the mapping of original-ID to translation-ID. This map is filled with the translations like this:

protected mixed $copyToOtherLanguageMap = ['post' => [], 'term' => []]
{
  "post": {
    "de": {
         800: 801
    }
  }
}

$currentTranslationEntries

Current translations hold as an instance.

protected mixed $currentTranslationEntries = null

$splitTranslationEntriesCache

Cache for split translation entries.

protected SplObjectStorage<Translation_Entry, array<string|int, Translation_Entry>> $splitTranslationEntriesCache = []

$taxonomySourceResolutionExcludePostId

During `syncPostFromExternalSource()`, the duplicate post id excluded from WPML taxonomy sibling fallback (the in-progress translation must not supply term assignments as source).

protected int|null $taxonomySourceResolutionExcludePostId = null

$applyingExternalSourceSync

True while `syncPostFromExternalSource()` / `syncTermFromExternalSource()` write target fields. Suppresses live `updated_*_meta` fan-out in `Sync` for those writes.

private mixed $applyingExternalSourceSync = false

$postTaxonomyCopyingInProgress

Set while `assignTranslatedPostTerms()` calls `wp_set_object_terms()`.

private mixed $postTaxonomyCopyingInProgress = false

Without this, onSetObjectTermsCopyPostTaxonomies() would fan out again on the same write and recurse until PHP memory is exhausted (observed on WPML TM batch duplicate).

$postTaxonomyCopyTargets

Master post id => { sourceLocale, taxonomies, to: locale => translation post id }.

private array<int, array{sourceLocale: string, taxonomies: string[], to: array}> $postTaxonomyCopyTargets = []

Feeds the single global set_object_terms listener below. Replaces registering a new closure on every copyPostTaxonomies() call (the old pattern grew $wp_filter without bound during duplicate batches and contributed to OOM).

$postTaxonomySetObjectTermsHookRegistered

Ensures exactly one `set_object_terms` hook exists for the whole request.

private static mixed $postTaxonomySetObjectTermsHookRegistered = false

Methods

__construct()

C'tor.

public __construct(string $domain[, string $moFile = null ][, mixed $overrideClass = null ]) : mixed
Parameters
$domain : string

Original text domain where post_title and so on are translated

$moFile : string = null

Needed for TemporaryTextDomain. E. g. /var/www/html/wp-content/plugins/real-cookie-banner/languages/real-cookie-banner-%s.mo

$overrideClass : mixed = null

A class with a getPotLanguages method

Tags
codeCoverageIgnore

copyPostTaxonomies()

Copy already existing taxonomies as it can be inserted with `tax_input` directly.

public copyPostTaxonomies(int $from, int $to, array<string|int, string> $taxonomies, string $locale) : mixed

Additionally listen to term additions and copy.

Parameters
$from : int
$to : int
$taxonomies : array<string|int, string>

Taxonomy keys to copy

$locale : string

The destination locale

copyPostToOtherLanguage()

Translate given post to other language.

public copyPostToOtherLanguage(string $locale, string $currentLanguage, string $post_id, array<string|int, string> $meta, array<string|int, string> $taxonomies) : int|bool
Parameters
$locale : string
$currentLanguage : string
$post_id : string
$meta : array<string|int, string>

The meta keys to copy

$taxonomies : array<string|int, string>

The taxonomies to copy

Return values
int|bool

The new created post id

copyTermToOtherLanguage()

Translate given term to other language.

public copyTermToOtherLanguage(string $locale, string $currentLanguage, int $term_id, string $taxonomy, array<string|int, string> $meta) : int|bool
Parameters
$locale : string
$currentLanguage : string
$term_id : int
$taxonomy : string
$meta : array<string|int, string>

The meta keys to copy

Return values
int|bool

The new created term id

createTemporaryTextDomain()

Create a temporary text domain.

public createTemporaryTextDomain(string $locale[, bool $force = false ]) : mixed
Parameters
$locale : string
$force : bool = false

determineImplementation()

Determine implementation class.

public static determineImplementation([string $domain = '' ][, string $moFile = null ][, mixed $overrideClass = null ]) : AbstractLanguagePlugin
Parameters
$domain : string = ''
$moFile : string = null

Needed for TemporaryTextDomain. E. g. /var/www/html/wp-content/plugins/real-cookie-banner/languages/real-cookie-banner-%s.mo

$overrideClass : mixed = null

A class with a override method (arguments: locale)

Return values
AbstractLanguagePlugin

disableCopyAndSync()

Disable sync mechanism of our language plugin as it is handled by `Sync.php`.

public abstract disableCopyAndSync(Sync $sync) : mixed
Parameters
$sync : Sync

duplicatePostMeta()

Copy already existing meta as it can be inserted with `meta_input` directly.

public duplicatePostMeta(int $from, int $to, array<string|int, string> $meta) : mixed

Additionally listen to term meta addition and copy.

Parameters
$from : int
$to : int
$meta : array<string|int, string>

Meta keys to copy

filterMetaValue()

Apply a WordPress filter so a meta value can be modified for copy process to other languages.

public filterMetaValue(string $type, int $from, int $to, string $meta_key, mixed $meta_value, string $locale) : mixed
Parameters
$type : string

E. g. 'post'

$from : int

Object id of source language item

$to : int

Object id of destination language item

$meta_key : string
$meta_value : mixed
$locale : string

Destination locale

filterWithExistingTranslatedTextDomain()

Filter a list of locales and check if translations from a PO/MO file exists.

public filterWithExistingTranslatedTextDomain(array<string|int, string> $locales[, array<string|int, string> $skip = [] ]) : mixed
Parameters
$locales : array<string|int, string>
$skip : array<string|int, string> = []

Allows to skip locales and they will never be in the result, e.g. minimal translations; the codes need to be compatible with the WordPress locale format.

findI18nKeyOfTranslation()

The same as `findI18nKeyOfTranslationRaw`, but with caching enabled as this could be called very often.

public findI18nKeyOfTranslation(string $input, bool &$found, array<string|int, string> &$contexts) : mixed
Parameters
$input : string
$found : bool
$contexts : array<string|int, string>

findI18nKeyOfTranslationRaw()

Find an i18n key for `__()` from a given translated string.

public findI18nKeyOfTranslationRaw(string $input, bool &$found, array<string|int, string> &$contexts) : mixed
Parameters
$input : string
$found : bool

Sets to true when a translation got found

$contexts : array<string|int, string>

getActiveCountriesFlags()

Get the flags of all active languages.

public getActiveCountriesFlags() : mixed

getActiveLanguages()

Get all active languages.

public abstract getActiveLanguages() : array<string|int, string>
Return values
array<string|int, string>

getCountryFlag()

Get a `src` compatible link to the country flag.

public abstract getCountryFlag(string $locale) : string|false
Parameters
$locale : string
Return values
string|false

getCurrentLanguage()

Get current language.

public abstract getCurrentLanguage() : string
Return values
string

getCurrentLanguageFallback()

Get current language or fallback to default language when the multilingual is in a state like "Show all languages" (option known in the admin toolbar).

public getCurrentLanguageFallback() : mixed

getCurrentPostId()

Get current id of passed post id and fallback to passed id, when no translation found.

public abstract getCurrentPostId(int $id, string $post_type[, string|null $locale = null ]) : int
Parameters
$id : int
$post_type : string
$locale : string|null = null

Get item of this language; null = active language

Return values
int

getCurrentTermId()

Get the term id for `$locale`; adapters fall back to `$id` when no translation exists.

public abstract getCurrentTermId(int $id, string $taxonomy[, string|null $locale = null ]) : int
Parameters
$id : int
$taxonomy : string
$locale : string|null = null

Target language code

Return values
int

getDefaultLanguage()

Get default language.

public abstract getDefaultLanguage() : string
Return values
string

getLanguageSwitcher()

Get a language switcher for the current page.

public abstract getLanguageSwitcher() : array<string|int, array<string|int, mixed>>
Return values
array<string|int, array<string|int, mixed>>

getLocalesBeforeSwitch()

List of locales before switching locale via `switchToLanguage`.

public getLocalesBeforeSwitch() : mixed

getObjectTermIdsForPostLanguage()

Term ids assigned to a post in a specific language context (avoids WPML read fallbacks).

public getObjectTermIdsForPostLanguage(int $postId, string $taxonomy[, string|null $locale = null ]) : array<string|int, int>
Parameters
$postId : int
$taxonomy : string
$locale : string|null = null

When empty, uses the post's language

Return values
array<string|int, int>

getOriginalPostId()

Get original id of passed post id.

public abstract getOriginalPostId(int $id, string $post_type) : int
Parameters
$id : int
$post_type : string
Return values
int

getOriginalTermId()

Get original id of passed term id.

public abstract getOriginalTermId(int $id, string $taxonomy) : int
Parameters
$id : int
$taxonomy : string
Return values
int

getOverrideClassInstance()

Get an instance of the `overrideClass`.

public getOverrideClassInstance() : mixed

Get the URL of a given URL for another locale.

public abstract getPermalink(string $url, string $locale) : string
Parameters
$url : string
$locale : string
Return values
string

getPostLanguage()

Get language of passed post id.

public abstract getPostLanguage(int $id) : string
Parameters
$id : int
Return values
string

Returns empty string if no language is set or cannot be determined, otherwise the locale

getPostTranslationIds()

Get all translations of a given post type.

public abstract getPostTranslationIds(int $id, string $post_type) : array<string|int, int>
Parameters
$id : int
$post_type : string
Return values
array<string|int, int>

getSkipHTMLForTag()

Get the HTML attribute so the "dynamic" replacement gets disabled on frontend side. This can be useful for texts which are directly translated in PHP already and gets translated via JavaScript again.

public getSkipHTMLForTag([mixed $force = false ]) : string
Parameters
$force : mixed = false

Pass true to get the attribute and do not respect isCurrentlyInEditorPreview

Return values
string

getSync()

Get `Sync` instance for this plugin. Can be `null` if not given.

public getSync() : mixed

getTaxonomyTranslationIds()

Get all translations of a given taxonomy.

public abstract getTaxonomyTranslationIds(int $id, string $taxonomy) : array<string|int, int>
Parameters
$id : int
$taxonomy : string
Return values
array<string|int, int>

getTemporaryTextDomainName()

Get the current temporary text domain name which can be used for `__` when e.g. inside `switchToLanguage`.

public getTemporaryTextDomainName() : mixed

getTermLanguage()

Get language of passed term.

public abstract getTermLanguage(int $termTaxonomyId, string $taxonomy) : string
Parameters
$termTaxonomyId : int

term_taxonomy_id (WPML element id); resolved to term_id where needed

$taxonomy : string
Return values
string

Returns empty string if no language is set or cannot be determined, otherwise the locale

getTranslatedName()

Get translated name for a given locale.

public abstract getTranslatedName(string $locale) : string
Parameters
$locale : string
Return values
string

getWordPressCompatibleLanguageCode()

Get the WordPress compatible language code of a given locale.

public abstract getWordPressCompatibleLanguageCode(string $locale) : string
Parameters
$locale : string
Return values
string

isApplyingExternalSourceSync()

Whether `Sync::updated_postmeta()` / `Sync::updated_term_meta()` should skip.

public isApplyingExternalSourceSync() : mixed

See whileApplyingExternalSourceSync().

isCurrentlyInEditorPreview()

Check if the translate plugin is currently in edit mode (preview).

public isCurrentlyInEditorPreview() : bool
Return values
bool

isExternalTranslationSyncDeferredForPost()

Gate for `Sync::save_post()`: when `true`, Sync skips post sync for this write.

public isExternalTranslationSyncDeferredForPost(int $postId) : mixed

Sync::save_post() calls this first and returns immediately when it is true — no copyPostToOtherLanguage(), no cross-language meta/column sync on that hook. The external plugin already created or is creating the translation; applies sync copy rules later via syncPostFromExternalSource() instead.

WPML example: true only while make_duplicate runs (duplicateCreationInProgress). After icl_make_duplicate, WPML duplicate meta is removed so ongoing saves use Sync.

Parameters
$postId : int

isExternalTranslationSyncDeferredForTerm()

Gate for `Sync::created_term()`: when `true`, Sync skips term sync for this write.

public isExternalTranslationSyncDeferredForTerm(int $term_id, string $taxonomy) : mixed

Sync::created_term() calls this first and returns immediately when it is true — no copyTermToOtherLanguage() for other languages on that hook. The external plugin already inserted the translated term; applies sync copy rules later via syncTermFromExternalSource() instead.

WPML example: Taxonomy Translation UI (e.g. Service groups → "Copy to all languages", wp_ajax_wpml_save_term). Skipping avoids duplicate/orphan terms in the source language.

Parameters
$term_id : int
$taxonomy : string

iterateAllLanguagesContext()

Iterate all language contexts.

public iterateAllLanguagesContext(callable $callback[, array<string|int, string> $skip = [] ]) : mixed
Parameters
$callback : callable

Arguments: $locale, $currentLanguage

$skip : array<string|int, string> = []

Skip locales

iterateOtherLanguagesContext()

Iterate all other languages than current one and get their context.

public iterateOtherLanguagesContext(callable $callback) : mixed

Context = switch to the language.

Attention: If you are using switchToLanguage in a REST API call, please consider to pass the _wp_http_referer parameter. E.g. TranslatePress checks if the referer is an admin page and behaves differently.

Parameters
$callback : callable

Arguments: $locale, $currentLanguage

lockCurrentTranslations()

Do not allow to take another snapshot of current translations.

public lockCurrentTranslations([bool $state = false ]) : mixed
Parameters
$state : bool = false

matchLanguageCodeFromWordPressCompatibleLocale()

Resolve the plugin language code (e.g. en, de) from a WordPress-compatible locale (e.g. en_US from {@see getWordPressCompatibleLanguageCode()}). Also accepts an already-short plugin code when it is listed in {@see getActiveLanguages()}.

public matchLanguageCodeFromWordPressCompatibleLocale(string $wordpressCompatibleLocale) : mixed
Parameters
$wordpressCompatibleLocale : string

maybePersistTranslation()

Maybe persist a translation in the database of available translations.

public maybePersistTranslation(mixed $sourceContent, mixed $content, mixed $sourceLocale, mixed $targetLocale[, mixed $force = false ]) : mixed
Parameters
$sourceContent : mixed
$content : mixed

Pass null to delete the translation

$sourceLocale : mixed
$targetLocale : mixed
$force : mixed = false

Pass true to force persist the translation

onSetObjectTermsCopyPostTaxonomies()

Copy taxonomy assignments from a master post to its translations when terms are set on the master.

public onSetObjectTermsCopyPostTaxonomies(int $object_id, array<string|int, int>|array<string|int, string> $terms, array<string|int, int> $tt_ids, string $taxonomy, bool $append) : mixed
Parameters
$object_id : int
$terms : array<string|int, int>|array<string|int, string>
$tt_ids : array<string|int, int>
$taxonomy : string
$append : bool

postCopiedToAllOtherLanguages()

This method is called due to `Sync::save_post`. It allows you to get a list of all translations of a post in an associate array.

public postCopiedToAllOtherLanguages(array<string|int, int> $translations) : mixed
Parameters
$translations : array<string|int, int>

remapPostId()

Resolve a post id to its translation in `$locale`, if one should be stored on a translation post.

public remapPostId(int $postId, string $referent_post_type, string $locale) : int

Adapters return the source id when no translation exists; this helper still accepts that id when the referenced post already belongs to $locale (same idea as taxonomy remapping on translation posts). Callers that store lists (e.g. comma-separated meta) loop and collect non-zero results.

Parameters
$postId : int

Referenced post id

$referent_post_type : string

Post type of the referenced post

$locale : string

Target language code

Return values
int

Translated post id, or 0 when nothing valid applies in $locale

setPostLanguage()

This method is called due to `Sync::save_post`. It allows you to assign a post to a given language.

public setPostLanguage(int $postId, string $locale) : mixed
Parameters
$postId : int
$locale : string

setSync()

Set `Sync` instance for this plugin. Can be `null` if not given.

public setSync(Sync $sync) : mixed
Parameters
$sync : Sync

setTermLanguage()

This method is called due to `Sync::created_term`. It allows you to assign a term to a given language.

public setTermLanguage(int $termId, string $locale) : mixed
Parameters
$termId : int
$locale : string

snapshotCurrentTranslations()

Snapshot the current translations.

public snapshotCurrentTranslations([bool $force = false ]) : mixed
Parameters
$force : bool = false

splitTranslationEntries()

Split a translation entry key into multiple parts. This is useful when using e.g. TranslatePress and we need to find translations from MO file which is divided into multiple "parts" like `<strong>Text</strong>: Another text`.

public splitTranslationEntries(array<string|int, Translation_Entry&$entriesToSplit) : mixed
Parameters
$entriesToSplit : array<string|int, Translation_Entry>
Tags
see
https://github.com/WordPress/WordPress/blob/8df15c4374b5cea6627e3f149058904bfa793dcf/wp-includes/pomo/entry.php

switch()

Switch to a given language code. Please do not use this function directly, use `switchToLanguage` instead!

public abstract switch(string $locale) : mixed
Parameters
$locale : string

switchToLanguage()

Open given language and get their context. Context = switch to the language.

public switchToLanguage(string $locale, callable $callback) : mixed

Attention: If you are using switchToLanguage in a REST API call, please consider to pass the _wp_http_referer parameter. E.g. TranslatePress checks if the referer is an admin page and behaves differently.

Parameters
$locale : string
$callback : callable

Arguments: $locale, $currentLanguage, $temporaryTextDomain

syncPostFromExternalSource()

Apply sync copy rules after an external plugin created a post translation: taxonomies + translated columns.

public syncPostFromExternalSource(int $from, int $to, string $locale[, array<string|int, string> $taxonomies = [] ][, array<string|int, mixed> $postConfiguration = [] ]) : mixed

Title/content/excerpt use the same rules as duplicatePost() (translateInput() without extra contexts). Post meta is not read from the master again (large payloads). Values already on $to from the external duplicate are passed through filterMetaValue() when a consumer registered DevOwl/Multilingual/Copy/Meta/post/{key}.

Parameters
$from : int

Source post id

$to : int

Target post id

$locale : string

Target language code

$taxonomies : array<string|int, string> = []

Taxonomies to remap to the target locale (same as copyPostToOtherLanguage)

$postConfiguration : array<string|int, mixed> = []

Sync options for the post type (from Sync::getPostsConfiguration())

syncPostMetaFromExternalSource()

Run configured post meta through `filterMetaValue()` on the target translation.

public syncPostMetaFromExternalSource(int $from, int $to, array<string|int, string> $metaKeys, string $locale[, bool $readValueFromTarget = false ]) : mixed
Parameters
$from : int

Source post id

$to : int

Target post id

$metaKeys : array<string|int, string>

Meta keys registered for copy / copy-once sync

$locale : string

Target language code

$readValueFromTarget : bool = false

When true, read meta from $to (WPML already copied) and update only if the filter changes the value

syncTermFromExternalSource()

Apply sync copy (meta + term columns) after an external plugin created the translation.

public syncTermFromExternalSource(int $from, int $to, array<string|int, string> $metaKeys, string $locale) : mixed

Mirrors duplicateTerm(): snapshot source PO catalog via withSourceTranslationCatalog(), switch target locale, translateInput.

Parameters
$from : int

Source term id

$to : int

Target term id

$metaKeys : array<string|int, string>

Meta keys registered for copy / copy-once sync

$locale : string

Target language code

syncTermMetaFromExternalSource()

Copy configured term meta from the source translation after an external plugin created the target.

public syncTermMetaFromExternalSource(int $from, int $to, array<string|int, string> $metaKeys, string $locale) : mixed
Parameters
$from : int

Source term id

$to : int

Target term id

$metaKeys : array<string|int, string>

Meta keys registered for copy / copy-once sync

$locale : string

Target language code

teardownTemporaryTextDomain()

Teardown the known temporary text domain.

public teardownTemporaryTextDomain() : mixed

termCopiedToAllOtherLanguages()

This method is called due to `Sync::created_term`. It allows you to get a list of all translations of a term in an associate array.

public termCopiedToAllOtherLanguages(array<string|int, int> $translations) : mixed
Parameters
$translations : array<string|int, int>

translatableStrings()

Extract translatable strings from a given content. The returned array is a map of the original strings to the translatable strings.

public translatableStrings(mixed $content) : array<string|int, array<string|int, string>>
Parameters
$content : mixed
Return values
array<string|int, array<string|int, string>>

translateArray()

Translate a complete array to a given locale (recursively). This is mostly implemented by output buffer plugins like TranslatePress or Weglot.

public translateArray(array<string|int, mixed> $content[, array<string|int, string> $skipKeys = [] ][, string $locale = null ][, array<string|int, string> $context = null ]) : array<string|int, mixed>
Parameters
$content : array<string|int, mixed>
$skipKeys : array<string|int, string> = []
$locale : string = null
$context : array<string|int, string> = null
Return values
array<string|int, mixed>

translateInput()

Translate a given input from known translations (.po, .pot).

public translateInput(string $input[, array<string|int, string> $contexts = null ]) : mixed
Parameters
$input : string
$contexts : array<string|int, string> = null

translateStrings()

Translate strings to a given locale. Do not use this function directly, use `translateArray` instead!

public translateStrings(mixed &$content, mixed $locale[, mixed $context = null ]) : mixed
Parameters
$content : mixed

This parameter needs to be passed as reference map, see also translateArray. The implementation needs to update the references correctly

$locale : mixed
$context : mixed = null

unsetCurrentTranslations()

Unset current translations.

public unsetCurrentTranslations() : mixed

withSourceTranslationCatalog()

Run a callback with the source-language PO/MO catalog snapshotted (same as `CopyContent::copy`).

public withSourceTranslationCatalog(string $sourceLocale, callable $callback) : mixed

While locked, translateInput() resolves msgids from the snapshot and translates via the active target-language text domain inside nested switchToLanguage() calls.

Parameters
$sourceLocale : string
$callback : callable

duplicateMeta()

Listen to meta (term, post, ...) addition and copy.

protected duplicateMeta(string $type, int $from, int $to, array<string|int, string> $meta) : mixed
Parameters
$type : string

E. g. 'post'

$from : int
$to : int
$meta : array<string|int, string>

Meta keys to copy

duplicatePost()

A simple `get_post` => `wp_insert_post` wrapper.

protected duplicatePost(WP_Post $post) : mixed
Parameters
$post : WP_Post

duplicateTerm()

A simple `get_term` => `wp_insert_term` wrapper.

protected duplicateTerm(WP_Term $term, string $taxonomy) : mixed
Parameters
$term : WP_Term
$taxonomy : string

duplicateTermMeta()

Listen to term meta addition and copy.

protected duplicateTermMeta(int $from, int $to, array<string|int, string> $meta) : mixed
Parameters
$from : int
$to : int
$meta : array<string|int, string>

Meta keys to copy

fetchObjectTermIdsWithoutFilters()

Read assigned term ids bypassing WPML `get_object_terms` filters.

protected fetchObjectTermIdsWithoutFilters(int $postId, string $taxonomy) : array<string|int, int>
Parameters
$postId : int
$taxonomy : string
Return values
array<string|int, int>

resolveSourceTermsByTaxonomyForPostCopy()

Taxonomy term ids assigned to the source post before remapping onto a translation.

protected resolveSourceTermsByTaxonomyForPostCopy(int $from, array<string|int, string> $taxonomies) : array<string, array<string|int, int>>

Default: unfiltered read on $from only. WPML::resolveSourceTermsByTaxonomyForPostCopy() adds WPML-specific fallbacks (snapshot at icl_before_make_duplicate, then trid siblings) when the live read is empty after WPML duplicate housekeeping.

Parameters
$from : int

Source post id

$taxonomies : array<string|int, string>
Return values
array<string, array<string|int, int>>

translateStringFromMo()

Translate string from `.mo` file. Please consider to create a temporary text domain before!

protected translateStringFromMo(string $content, string $targetLocale[, array<string|int, string> $context = null ]) : array<string|int, mixed>
Parameters
$content : string
$targetLocale : string
$context : array<string|int, string> = null
Return values
array<string|int, mixed>

[$found: boolean, $content: string]

whileApplyingExternalSourceSync()

Run callback while external-source sync writes the target translation only (no live meta fan-out).

protected whileApplyingExternalSourceSync(callable $callback) : mixed
Parameters
$callback : callable

assignTranslatedPostTerms()

Map source term ids to the target locale and assign them on a translation post.

private assignTranslatedPostTerms(int $postId, array<string|int, int> $sourceTermIds, string $taxonomy, string $locale) : mixed

WordPress stores only numeric term ids in wp_term_relationships — no language. A DE translation post can therefore reference an EN group term (e.g. after reset when only EN rcb-cookie-group rows exist, then WPML make_duplicate copies those relationships and getCurrentTermId() returns the same id when no linked DE term exists). That is valid data for remap: when resolved id equals source id, check getTermLanguage() — assign if the term already belongs to $locale, otherwise copyTermToOtherLanguage(). Do not call wp_set_object_terms(…, []) when the source had terms but nothing could be mapped (would wipe groups on the new translation, notably DE → EN duplicate of a DE cookie still wired to EN Essential).

Parameters
$postId : int
$sourceTermIds : array<string|int, int>
$taxonomy : string
$locale : string

fetchObjectTermIds()

Read taxonomy term ids currently assigned to a post.

private fetchObjectTermIds(int $postId, string $taxonomy) : array<string|int, int>
Parameters
$postId : int
$taxonomy : string
Return values
array<string|int, int>
On this page

Search results