class-wpml-media-custom-field-images-translation.php
3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<?php
/**
* Class WPML_Media_Custom_Field_Images_Translation
* Translate images in posts custom fields translations when a custom field is created or updated
*/
class WPML_Media_Custom_Field_Images_Translation implements IWPML_Action {
/**
* @var WPML_Media_Custom_Field_Images_Translation
*/
private $images_updater;
/**
* @var SitePress
*/
private $sitepress;
/**
* @var TranslationManagement
*/
private $iclTranslationManagement;
/**
* WPML_Media_Custom_Field_Images_Translation constructor.
*
* @param WPML_Media_Translated_Images_Update $images_updater
* @param SitePress $sitepress
* @param TranslationManagement $iclTranslationManagement
*/
public function __construct(
WPML_Media_Translated_Images_Update $images_updater,
SitePress $sitepress,
TranslationManagement $iclTranslationManagement
) {
$this->images_updater = $images_updater;
$this->sitepress = $sitepress;
$this->iclTranslationManagement = $iclTranslationManagement;
}
public function add_hooks() {
add_action( 'updated_post_meta', array( $this, 'translate_images' ), PHP_INT_MAX, 4 );
add_action( 'added_post_meta', array( $this, 'translate_images' ), PHP_INT_MAX, 4 );
}
/**
* @param int $meta_id
* @param int $object_id
* @param string $meta_key
* @param string $meta_value
*/
public function translate_images( $meta_id, $object_id, $meta_key, $meta_value ) {
$settings_factory = new WPML_Custom_Field_Setting_Factory( $this->iclTranslationManagement );
$setting = $settings_factory->post_meta_setting( $meta_key );
$is_custom_field_translatable = $this->sitepress->get_wp_api()
->constant( 'WPML_TRANSLATE_CUSTOM_FIELD' ) === $setting->status();
$post_type = get_post_type( $object_id );
$is_post_translatable = $this->sitepress->is_translated_post_type( $post_type );
if ( is_string( $meta_value ) && $is_post_translatable && $is_custom_field_translatable ) {
$post_element = new WPML_Post_Element( $object_id, $this->sitepress );
$source_language = $post_element->get_source_language_code();
if ( null !== $source_language ) {
$this->filter_meta_value_and_update(
$meta_value,
$meta_key,
$post_element->get_language_code(),
$source_language,
$object_id
);
} else {
foreach ( array_keys( $this->sitepress->get_active_languages() ) as $language ) {
$translation = $post_element->get_translation( $language );
if ( $translation ) {
$this->filter_meta_value_and_update(
$meta_value,
$meta_key,
$language,
$source_language,
$translation->get_id()
);
}
}
}
}
}
/**
* @param string $meta_value
* @param string $meta_key
* @param string $target_language
* @param string $source_language
* @param int $post_id
*
* @return string
*/
private function filter_meta_value_and_update( $meta_value, $meta_key, $target_language, $source_language, $post_id ) {
$meta_value_filtered = $this->images_updater->replace_images_with_translations(
$meta_value,
$target_language,
$source_language
);
if ( $meta_value_filtered !== $meta_value ) {
remove_action( 'updated_post_meta', array( $this, 'translate_images' ), PHP_INT_MAX );
update_post_meta( $post_id, $meta_key, wp_slash( $meta_value_filtered ), $meta_value );
add_action( 'updated_post_meta', array( $this, 'translate_images' ), PHP_INT_MAX, 4 );
}
return $meta_value_filtered;
}
}