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 / Linked.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
Linked.php
79 lines
1 <?php
2
3 namespace WCML\Synchronization\Component;
4
5 class Linked extends SynchronizerForMeta {
6
7 const LINKED_META_KEYS = [
8 '_upsell_ids',
9 '_cross_sell_ids',
10 '_children',
11 ];
12
13 const TRANSIENTS_PREFIXES = [
14 'wc_product_children_%s',
15 '_transient_wc_product_children_ids_%s',
16 ];
17
18 public function run( $product, $translationsIds, $translationsLanguages ) {
19 foreach ( self::LINKED_META_KEYS as $metaKey ) {
20 $this->syncLinkType( $product->ID, $translationsIds, $translationsLanguages, $metaKey );
21 }
22 foreach ( $translationsIds as $translationId ) {
23 $translationParentId = wp_get_post_parent_id( $translationId );
24 if ( $translationParentId ) {
25 foreach ( self::TRANSIENTS_PREFIXES as $transientPrefix ) {
26 delete_transient( sprintf( $transientPrefix, $translationParentId ) );
27 }
28 }
29 }
30 }
31
32 private function syncLinkType( $productId, $translationsIds, $translationsLanguages, $metaKey ) {
33 $productsIds = array_merge( [ $productId ], $translationsIds );
34 $storedLinks = $this->getMeta( $metaKey, $productsIds );
35 $productLinks = $storedLinks[ $productId ] ?? null;
36
37 if ( null === $productLinks ) {
38 $translationsIdsToClear = array_intersect( $translationsIds, array_keys( $storedLinks ) );
39 $this->clearTranslationsValue( $translationsIdsToClear, $metaKey );
40 return;
41 }
42
43 if ( empty( $productLinks ) ) {
44 $this->spreadEmptyValue( $translationsIds, $storedLinks, $metaKey );
45 return;
46 }
47
48 $translatedLinks = [];
49 foreach ( $translationsLanguages as $translationId => $language ) {
50 $translatedLinks[ $translationId ] = $this->translateLinks( $productLinks, $language );
51 }
52
53 $metaToInsert = [];
54 $metaToUpdate = [];
55 foreach ( $translatedLinks as $translationId => $translationLinks ) {
56 if ( ! array_key_exists( $translationId, $storedLinks ) ) {
57 $metaToInsert[ $translationId ] = $translationLinks;
58 continue;
59 }
60 if ( maybe_serialize( $translationLinks ) === maybe_serialize( $storedLinks[ $translationId ] ) ) {
61 continue;
62 }
63 $metaToUpdate[ $translationId ] = $translationLinks;
64 }
65
66 $this->insertMeta( $metaKey, $metaToInsert );
67 $this->updateMeta( $metaKey, $metaToUpdate );
68 }
69
70 private function translateLinks( $productLinks, $language ) {
71 $translatedLinkedProducts = [];
72 foreach ( $productLinks as $linkedProduct ) {
73 $translatedLinkedProducts[] = apply_filters( 'wpml_object_id', $linkedProduct, get_post_type( $linkedProduct ), false, $language );
74 }
75 return $translatedLinkedProducts;
76 }
77
78 }
79