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 / inc / class-wcml-coupons.php
woocommerce-multilingual / inc Last commit date
admin-menus 1 month ago currencies 1 month ago template-classes 1 month ago translation-editor 1 month ago class-wcml-ajax-setup.php 1 month ago class-wcml-attributes.php 1 month ago class-wcml-capabilities.php 1 month ago class-wcml-cart-removed-items-widget.php 1 year ago class-wcml-cart-switch-lang-functions.php 1 month ago class-wcml-cart-sync-warnings.php 1 month ago class-wcml-cart.php 1 month ago class-wcml-comments.php 1 month ago class-wcml-compatibility.php 1 month ago class-wcml-coupons.php 1 month ago class-wcml-dependencies.php 1 month ago class-wcml-emails.php 1 month ago class-wcml-endpoints.php 1 month ago class-wcml-install.php 1 month ago class-wcml-languages-upgrader.php 1 month ago class-wcml-locale.php 1 month ago class-wcml-orders.php 1 month ago class-wcml-products-screen-options.php 1 month ago class-wcml-products.php 1 month ago class-wcml-reports.php 1 month ago class-wcml-requests.php 1 month ago class-wcml-resources.php 1 month ago class-wcml-store-pages.php 1 month ago class-wcml-terms.php 1 month ago class-wcml-tp-support.php 1 month ago class-wcml-troubleshooting.php 1 month ago class-wcml-upgrade.php 1 month ago class-wcml-url-translation.php 1 month ago class-wcml-wc-gateways.php 1 month ago class-wcml-wc-shipping.php 1 month ago class-wcml-wc-strings.php 1 month ago class-wcml-widgets.php 1 month ago constants.php 1 month ago functions-pure.php 1 month ago functions.php 1 month ago installer-loader.php 1 month ago missing-php-functions.php 1 month ago wcml-core-functions.php 1 month ago wcml-switch-lang-request.php 1 month ago
class-wcml-coupons.php
87 lines
1 <?php
2
3 class WCML_Coupons {
4
5 private $sitepress;
6
7 public function __construct( SitePress $sitepress ) {
8 $this->sitepress = $sitepress;
9 }
10
11 public function add_hooks() {
12
13 add_action( 'woocommerce_coupon_loaded', [ $this, 'wcml_coupon_loaded' ] );
14 add_action( 'admin_init', [ $this, 'icl_adjust_terms_filtering' ] );
15
16 add_filter( 'woocommerce_coupon_is_valid_for_product', [ $this, 'is_valid_for_product' ], 10, 4 );
17 }
18
19 private function apply_translated_product_ids( array $product_ids, WC_Coupon $coupon, $coupon_setter_method ) {
20 if ( ! method_exists( $coupon, $coupon_setter_method ) ) {
21 return;
22 }
23
24 $translated_product_ids = wpml_collect( $product_ids )
25 ->map( function ( $product_id ) {
26 return $this->sitepress->get_object_id( $product_id, get_post_type( $product_id ) );
27 } )
28 ->filter();
29
30 if ( $translated_product_ids->count() ) {
31 $coupon->$coupon_setter_method( $translated_product_ids->toArray() );
32 }
33 }
34
35 private function apply_translated_product_category_ids( array $category_ids, WC_Coupon $coupon, $coupon_setter_method ) {
36 if ( ! method_exists( $coupon, $coupon_setter_method ) ) {
37 return;
38 }
39
40 $translated_category_ids = wpml_collect( $category_ids )
41 ->map( function ( $category_id ) {
42 return $this->sitepress->get_object_id( $category_id, 'product_cat' );
43 } )
44 ->filter();
45
46 if ( $translated_category_ids->count() ) {
47 $coupon->$coupon_setter_method( $translated_category_ids->toArray() );
48 }
49 }
50
51 public function wcml_coupon_loaded( WC_Coupon $coupon ) {
52
53 $this->apply_translated_product_ids( $coupon->get_product_ids(), $coupon, 'set_product_ids' );
54 $this->apply_translated_product_ids( $coupon->get_excluded_product_ids(), $coupon, 'set_excluded_product_ids' );
55
56 $this->apply_translated_product_category_ids( $coupon->get_product_categories(), $coupon, 'set_product_categories' );
57 $this->apply_translated_product_category_ids( $coupon->get_excluded_product_categories(), $coupon, 'set_excluded_product_categories' );
58 }
59
60 public function icl_adjust_terms_filtering() {
61 if ( is_admin() && isset( $_GET['action'] ) && $_GET['action'] == 'woocommerce_json_search_products_and_variations' ) {
62 global $icl_adjust_id_url_filter_off;
63 $icl_adjust_id_url_filter_off = true;
64 }
65 }
66
67 public function is_valid_for_product( $valid, $product, $object, $values ) {
68
69 $product_id = $product->is_type( 'variation' ) ? $product->get_parent_id() : $product->get_id();
70 $translated_product_id = apply_filters( 'wpml_object_id', $product_id, 'product', false, $this->sitepress->get_current_language() );
71
72 if ( $translated_product_id && $product_id !== $translated_product_id ) {
73
74 remove_filter( 'woocommerce_coupon_is_valid_for_product', [ $this, 'is_valid_for_product' ], 10 );
75
76 $valid = $object->is_valid_for_product( wc_get_product( $translated_product_id ), $values );
77
78 add_filter( 'woocommerce_coupon_is_valid_for_product', [ $this, 'is_valid_for_product' ], 10, 4 );
79
80 }
81
82 return $valid;
83
84 }
85
86 }
87