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 / DownloadableFiles / SyncDownloadableFilesFromATE.php
woocommerce-multilingual / classes / DownloadableFiles Last commit date
SyncDownloadableFilesFromATE.php 1 month 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