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 / Synchronization / Component / Post.php
woocommerce-multilingual / classes / Synchronization / Component Last commit date
Attachments.php 1 week ago Attributes.php 1 week ago DownloadableFiles.php 1 week ago Linked.php 1 week ago Meta.php 1 week ago Post.php 1 week ago Stock.php 1 week ago Synchronizer.php 1 week ago SynchronizerForMeta.php 1 week ago Taxonomies.php 1 week ago VariationAttachments.php 1 week ago VariationMeta.php 1 week ago VariationTaxonomies.php 1 week ago Variations.php 1 week ago
Post.php
127 lines
1 <?php
2
3 namespace WCML\Synchronization\Component;
4
5 use WCML\Utilities\DB;
6
7 class Post extends Synchronizer {
8
9 public function run( $product, $translationsIds, $translationsLanguages ) {
10 $productsIds = array_merge( [ $product->ID ], $translationsIds );
11 $fields = [ 'ID', 'post_parent' ];
12
13 if ( isset( $this->woocommerceWpml->settings['products_sync_order'] ) && $this->woocommerceWpml->settings['products_sync_order'] ) {
14 $fields[] = 'menu_order';
15 }
16 if ( ! empty( $this->woocommerceWpml->settings['products_sync_date'] ) ) {
17 $fields[] = 'post_date';
18 $fields[] = 'post_date_gmt';
19 }
20
21 $fieldsInQuery = implode( ',', $fields );
22
23 $productsData = $this->wpdb->get_results(
24 $this->wpdb->prepare(
25 "
26 SELECT {$fieldsInQuery}
27 FROM {$this->wpdb->posts}
28 WHERE ID IN (" . DB::prepareIn( $productsIds ) . ")
29 LIMIT %d
30 ",
31 count( $productsIds )
32 ),
33 OBJECT_K
34 );
35
36 $productData = $productsData[ $product->ID ] ?? null;
37 if ( ! $productData ) {
38 return;
39 }
40
41 unset( $productsData[ $product->ID ] );
42
43 $this->managePostParent( $productData, $productsData, $translationsLanguages );
44 $this->manageMenuOrder( $productData, $productsData );
45 $this->manageDate( $productData, $productsData );
46 }
47
48 private function managePostParent( $productData, $translationsData, $translationsLanguages ) {
49 $productParent = $productData->post_parent;
50 if ( ! $productParent ) {
51 return;
52 }
53
54 $productParentTranslations = $this->elementTranslations->get_element_translations( $productParent, false, true );
55 foreach ( $translationsData as $translationID => $translationData ) {
56 if ( ! in_array( (int) $translationData->post_parent, $productParentTranslations, true ) ) {
57 $translationLanguage = $translationsLanguages[ $translationID ];
58 $translationParentId = (int) $this->elementTranslations->element_id_in( $productParent, $translationLanguage, false );
59 $this->wpdb->update(
60 $this->wpdb->posts,
61 [ 'post_parent' => $translationParentId ],
62 [ 'id' => $translationID ]
63 );
64 }
65 }
66 }
67
68 private function manageMenuOrder( $productData, $translationsData ) {
69 if ( ! isset( $this->woocommerceWpml->settings['products_sync_order'] ) || !$this->woocommerceWpml->settings['products_sync_order'] ) {
70 return;
71 }
72
73 $productMenuOrder = $productData->menu_order;
74 $translationsToUpdate = [];
75
76 foreach ( $translationsData as $translationID => $translationData ) {
77 if ( $translationData->menu_order !== $productMenuOrder ) {
78 $translationsToUpdate[] = $translationID;
79 }
80 }
81
82 if ( ! empty( $translationsToUpdate ) ) {
83 $this->wpdb->query(
84 $this->wpdb->prepare(
85 "
86 UPDATE {$this->wpdb->posts}
87 SET menu_order = %d
88 WHERE ID IN (" . DB::prepareIn( $translationsToUpdate ) . ")
89 ",
90 $productMenuOrder
91 )
92 );
93 }
94 }
95
96 private function manageDate( $productData, $translationsData ) {
97 if ( empty( $this->woocommerceWpml->settings['products_sync_date'] ) ) {
98 return;
99 }
100
101 $productDate = $productData->post_date;
102 $productDateGmt = $productData->post_date_gmt;
103 $translationsToUpdate = [];
104
105 foreach ( $translationsData as $translationID => $translationData ) {
106 if ( $translationData->post_date !== $productDate || $translationData->post_date_gmt !== $productDateGmt ) {
107 $translationsToUpdate[] = $translationID;
108 }
109 }
110
111 if ( ! empty( $translationsToUpdate ) ) {
112 $this->wpdb->query(
113 $this->wpdb->prepare(
114 "
115 UPDATE {$this->wpdb->posts}
116 SET post_date = %s, post_date_gmt = %s
117 WHERE ID IN (" . DB::prepareIn( $translationsToUpdate ) . ")
118 ",
119 $productDate,
120 $productDateGmt
121 )
122 );
123 }
124 }
125
126 }
127