PluginProbe ʕ •ᴥ•ʔ
WPML Multilingual & Multicurrency for WooCommerce / 5.5.7
WPML Multilingual & Multicurrency for WooCommerce v5.5.7
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 / DownloadableFiles / SyncDownloadableFilesFromATE.php
woocommerce-multilingual / classes / DownloadableFiles Last commit date
SyncDownloadableFilesFromATE.php 1 week ago
SyncDownloadableFilesFromATE.php
91 lines
1 <?php
2
3 namespace WCML\DownloadableFiles;
4
5 use WCML\TranslationJob\Hooks;
6
7 class SyncDownloadableFilesFromATE {
8
9 public function add_hooks() {
10 add_action( 'wpml_pro_translation_completed', [
11 $this,
12 'save_downloadable_files_fields_translations',
13 ], 20, 3 );
14 }
15
16 public function save_downloadable_files_fields_translations( $post_id, $fields, $job ) {
17 if ( ! Hooks::isProduct( $job ) ) {
18 return null;
19 }
20
21 $groupedDownloadableFiles = $this->groupDownloadableFilesByProductIdConsideringProductVariants( $post_id, $fields, $job->language_code );
22
23 foreach ( $groupedDownloadableFiles as $product_id => $downloadableFiles ) {
24 $needUpdate = false;
25 $orig_file_path = maybe_unserialize( get_post_meta( $product_id, \WCML_Downloadable_Products::DOWNLOADABLE_FILES_META, true ) );
26
27 if ( ! is_array( $orig_file_path ) ) {
28 $orig_file_path = [];
29 }
30
31 foreach ( $downloadableFiles as $downloadableFileId => $downloadableFile ) {
32 $id = str_replace( \WCML_Synchronize_Product_Data::CUSTOM_FIELD_KEY_SEPARATOR, '-', $downloadableFileId );
33
34 $translatedDownloadableFileData = [
35 'name' => $downloadableFile['name'],
36 'file' => $downloadableFile['file'],
37 ];
38
39 if ( isset( $orig_file_path[ $id ] ) ) {
40 $translatedDownloadableFileData = array_merge( $orig_file_path[ $id ], $translatedDownloadableFileData );
41 }
42
43 $orig_file_path[ $id ] = $translatedDownloadableFileData;
44 $needUpdate = true;
45 }
46
47 if ( $needUpdate ) {
48 update_post_meta( $product_id, \WCML_Downloadable_Products::DOWNLOADABLE_FILES_META, $orig_file_path );
49 }
50 }
51 }
52
53 private function groupDownloadableFilesByProductIdConsideringProductVariants( $product_id, array $fields, $language ) {
54 $data = [];
55 foreach ( $fields as $field ) {
56
57 list( , $fileNo, $fileId, $title ) = \WCML_Downloadable_Products::parseDownloadableFileField( $field['field_type'] );
58 if ( null === $fileNo ) {
59 continue;
60 }
61
62 $variation_id = $product_id;
63
64 $exp = explode( ':', $title, 2 );
65
66 if ( ! empty( $exp[1] ) ) {
67 $title = $exp[0];
68 $variation_id = $exp[1];
69 }
70
71 if ( is_post_type_translated( 'product_variation' ) ) {
72 $translated_variation_id = apply_filters( 'wpml_object_id', $variation_id, 'product_variation', false, $language );
73 } else {
74 global $wpml_post_translations;
75 $translations = $wpml_post_translations->get_element_translations( $variation_id );
76 $translated_variation_id = $translations[ $language ] ?? null;
77 }
78
79 if ( ! isset( $data[ $translated_variation_id ] ) ) {
80 $data[ $translated_variation_id ] = [];
81 }
82 if ( ! isset( $data[ $translated_variation_id ][ $fileId ] ) ) {
83 $data[ $translated_variation_id ][ $fileId ] = [];
84 }
85 $data[ $translated_variation_id ][ $fileId ][ $title ] = $field['data'];
86 }
87
88 return $data;
89 }
90 }
91