PluginProbe ʕ •ᴥ•ʔ
WPML Multilingual & Multicurrency for WooCommerce / trunk
WPML Multilingual & Multicurrency for WooCommerce vtrunk
5.5.7 5.3.8 5.3.9 5.4.3 5.4.4 5.4.5 5.5.1 5.5.1.1 5.5.2.2 5.5.2.3 5.5.3 5.5.3.1 5.5.4 5.5.5 5.5.6 trunk 0.9 1.0 1.1 1.2 1.3 1.4 1.5 2.0 2.2 2.3 2.3.1 2.3.2 3.0 3.0.1 3.1 3.2 3.2.1 3.2.2 3.3 3.3.1 3.3.2 3.3.3 3.3.4 3.4 3.4.1 3.4.2 3.4.3 3.5 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.6 3.6.1 3.6.10 3.6.11 3.6.2 3.6.3 3.6.4 3.6.5 3.6.5.1 3.6.6 3.6.7 3.6.8 3.6.9 3.7 3.7.1 3.7.10 3.7.11 3.7.12 3.7.13 3.7.14 3.7.15 3.7.16 3.7.2 3.7.3 3.7.4 3.7.5 3.7.6 3.7.7 3.7.8 3.7.9 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.9.0 3.9.1 3.9.1.1 3.9.2 3.9.3 3.9.4 3.9.5 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.10.4 4.11.2 4.11.3.2 4.11.5 4.11.6 4.12.1 4.12.4 4.12.5 4.12.6 4.2.0 4.2.0.1 4.2.1 4.2.1.1 4.2.10 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.7.1 4.2.8 4.2.8.1 4.2.9 4.3.0 4.3.1 4.3.2 4.3.2.1 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.4.0 4.4.1 4.4.2 4.4.2.1 4.5.0 4.6.0 4.6.1 4.6.2 4.6.2.1 4.6.3 4.6.5 4.6.6 4.6.7 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.7.6 4.7.7 4.7.8 4.7.9 4.8.0 4.9.0 4.9.1 5.0.1 5.0.2 5.1.1 5.1.2 5.1.3 5.2.0 5.2.1 5.3.2 5.3.3.1 5.3.4 5.3.5 5.3.6 5.3.7
woocommerce-multilingual / classes / media / class-wcml-update-product-gallery-translation.php
woocommerce-multilingual / classes / media Last commit date
Wrapper 4 weeks ago class-wcml-product-gallery-filter-factory.php 3 years ago class-wcml-product-gallery-filter.php 4 weeks ago class-wcml-product-image-filter-factory.php 3 years ago class-wcml-product-image-filter.php 4 weeks ago class-wcml-update-product-gallery-translation-factory.php 5 years ago class-wcml-update-product-gallery-translation.php 4 weeks ago class-wml-append-gallery-to-post-media-ids-factory.php 5 years ago class-wml-append-gallery-to-post-media-ids.php 4 weeks ago
class-wcml-update-product-gallery-translation.php
73 lines
1 <?php
2
3 class WCML_Update_Product_Gallery_Translation implements IWPML_Action {
4
5 private $translation_element_factory;
6 private $media_usage_factory;
7
8 public function __construct(
9 WPML_Translation_Element_Factory $translation_element_factory,
10 WPML_Media_Usage_Factory $media_usage_factory
11 ) {
12 $this->translation_element_factory = $translation_element_factory;
13 $this->media_usage_factory = $media_usage_factory;
14 }
15
16 public function add_hooks() {
17 add_action( 'wpml_added_media_file_translation', [ $this, 'update_meta' ], PHP_INT_MAX, 3 );
18 }
19
20 public function update_meta( $original_attachment_id, $file, $language ) {
21 $media_usage = $this->media_usage_factory->create( $original_attachment_id );
22
23 $posts = $media_usage->get_posts();
24 foreach ( $posts as $source_post_id ) {
25 $source_post = $this->translation_element_factory->create( $source_post_id, 'post' );
26 $original_attachment_element = $this->translation_element_factory->create( $original_attachment_id, 'post' );
27 $updated_attachment_element = $original_attachment_element->get_translation( $language );
28 if ( ! $updated_attachment_element ) {
29 continue;
30 }
31 $meta_value = $this->get_translated_gallery( $source_post_id, $updated_attachment_element );
32 $this->update_gallery( $meta_value, $source_post, $updated_attachment_element );
33 }
34 }
35
36 private function get_translated_gallery( $source_post_id, WPML_Post_Element $updated_attachment_element ) {
37 $meta_value = [];
38
39 $original_gallery_meta = get_post_meta( $source_post_id, '_product_image_gallery', true );
40 if ( '' !== $original_gallery_meta ) {
41 $original_gallery = explode( ',', $original_gallery_meta );
42 $original_gallery = array_filter( $original_gallery );
43
44 foreach ( $original_gallery as $original_attachment_id ) {
45 $attachment_element = $this->translation_element_factory->create( $original_attachment_id, 'post' );
46 $translated_attachment = $attachment_element->get_translation( $updated_attachment_element->get_language_code() );
47 if ( null !== $translated_attachment ) {
48 $meta_value[] = $translated_attachment->get_id();
49 } else {
50 $meta_value[] = $original_attachment_id;
51 }
52 }
53 }
54
55 return $meta_value;
56 }
57
58 private function update_gallery(
59 array $meta_value,
60 WPML_Post_Element $source_post,
61 WPML_Post_Element $updated_attachment_element
62 ) {
63 if ( ! empty( $meta_value ) ) {
64 $translated_post = $source_post->get_translation( $updated_attachment_element->get_language_code() );
65 if ( $translated_post ) {
66 $value = implode( ',', $meta_value );
67 update_post_meta( $translated_post->get_id(), '_product_image_gallery', $value );
68 }
69 }
70 }
71
72 }
73