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 / shortcodes / class-wcml-wc-shortcode-product-category.php
woocommerce-multilingual / classes / shortcodes Last commit date
class-wcml-wc-shortcode-product-category.php 4 weeks ago
class-wcml-wc-shortcode-product-category.php
107 lines
1 <?php
2
3 use WPML\Collect\Support\Collection;
4
5 class WCML_WC_Shortcode_Product_Category {
6
7 private $sitepress;
8
9 public function __construct( \WPML\Core\ISitePress $sitepress ) {
10 $this->sitepress = $sitepress;
11 }
12
13 public function add_hooks() {
14 add_filter( 'shortcode_atts_product_categories', [ $this, 'shortcode_product_categories_convert_attributes' ] );
15 add_filter( 'woocommerce_shortcode_products_query', [ $this, 'translate_category' ], 10, 2 );
16 }
17
18 public function shortcode_product_categories_convert_attributes( $attributes ) {
19 if ( ! is_array( $attributes ) ) {
20 return $attributes;
21 }
22
23 if ( ! empty( $attributes['parent'] ) ) {
24 $attributes['parent'] = (int) apply_filters( 'wpml_object_id', $attributes['parent'], \WCML\Utilities\WCTaxonomies::TAXONOMY_PRODUCT_CATEGORY, true );
25 }
26
27 return $attributes;
28 }
29
30 public function translate_category( $args, $atts = null ) {
31
32 if ( $this->sitepress->get_default_language() !== $this->sitepress->get_current_language() ) {
33
34 if ( isset( $args['product_cat'] ) ) {
35 $args = $this->translate_categories_using_simple_tax_query( $args );
36 } elseif ( ! empty( $atts['category'] ) && isset( $args['tax_query'] ) ) {
37 $getProductCategoryObject = function ( $slugOrId ) {
38 if ( is_numeric( $slugOrId ) ) {
39 return get_term( $slugOrId, 'product_cat' );
40 }
41
42 return get_term_by( 'slug', $slugOrId, 'product_cat' );
43 };
44
45 $categories = wpml_collect( explode( ',', $atts['category'] ) )
46 ->map(
47 function( $slugOrId ) {
48 return trim( $slugOrId ); }
49 )
50 ->filter()
51 ->map( $getProductCategoryObject );
52
53 $args = $this->replace_category_in_query_arguments( $args, $categories );
54 }
55 }
56
57 return $args;
58 }
59
60 private function replace_category_in_query_arguments( array $args, Collection $terms ) {
61
62 foreach ( $args['tax_query'] as $i => $tax_query ) {
63 if ( ! is_array( $tax_query ) ) {
64 continue;
65 }
66 $args['tax_query'][ $i ] = [];
67 if ( ! is_int( key( $tax_query ) ) ) {
68 $tax_query = [ $tax_query ];
69 }
70 foreach ( $tax_query as $condition ) {
71 if ( 'product_cat' === $condition['taxonomy'] ) {
72 $condition['terms'] = $terms->pluck( $condition['field'] )->toArray();
73 }
74 $args['tax_query'][ $i ][] = $condition;
75 }
76 }
77
78 return $args;
79 }
80
81 public function translate_categories_using_simple_tax_query( $args ) {
82
83 $category_slugs = array_map( 'trim', explode( ',', $args['product_cat'] ) );
84
85 $filter_exists = remove_filter( 'terms_clauses', [ $this->sitepress, 'terms_clauses' ] );
86 $categories_translated = get_terms(
87 [
88 'slug' => $category_slugs,
89 'taxonomy' => 'product_cat',
90 ]
91 );
92 if ( $filter_exists ) {
93 add_filter( 'terms_clauses', [ $this->sitepress, 'terms_clauses' ], 10, 3 );
94 }
95
96 $category_slugs_translated = [];
97 foreach ( $categories_translated as $category_translated ) {
98 $category_slugs_translated[] = $category_translated->slug;
99 }
100 $args['product_cat'] = implode( ',', $category_slugs_translated );
101
102 return $args;
103 }
104
105
106 }
107