admin-menus
2 weeks ago
currencies
2 weeks ago
template-classes
2 weeks ago
translation-editor
2 weeks ago
class-wcml-ajax-setup.php
2 weeks ago
class-wcml-attributes.php
2 weeks ago
class-wcml-capabilities.php
2 weeks ago
class-wcml-cart-removed-items-widget.php
1 year ago
class-wcml-cart-switch-lang-functions.php
2 weeks ago
class-wcml-cart-sync-warnings.php
2 weeks ago
class-wcml-cart.php
2 weeks ago
class-wcml-comments.php
2 weeks ago
class-wcml-compatibility.php
2 weeks ago
class-wcml-coupons.php
2 weeks ago
class-wcml-dependencies.php
2 weeks ago
class-wcml-emails.php
2 weeks ago
class-wcml-endpoints.php
2 weeks ago
class-wcml-install.php
2 weeks ago
class-wcml-languages-upgrader.php
2 weeks ago
class-wcml-locale.php
2 weeks ago
class-wcml-orders.php
2 weeks ago
class-wcml-products-screen-options.php
2 weeks ago
class-wcml-products.php
2 weeks ago
class-wcml-reports.php
2 weeks ago
class-wcml-requests.php
2 weeks ago
class-wcml-resources.php
2 weeks ago
class-wcml-store-pages.php
2 weeks ago
class-wcml-terms.php
2 weeks ago
class-wcml-tp-support.php
2 weeks ago
class-wcml-troubleshooting.php
2 weeks ago
class-wcml-upgrade.php
2 weeks ago
class-wcml-url-translation.php
2 weeks ago
class-wcml-wc-gateways.php
2 weeks ago
class-wcml-wc-shipping.php
2 weeks ago
class-wcml-wc-strings.php
2 weeks ago
class-wcml-widgets.php
2 weeks ago
constants.php
2 weeks ago
functions-pure.php
2 weeks ago
functions.php
2 weeks ago
installer-loader.php
2 weeks ago
missing-php-functions.php
2 weeks ago
wcml-core-functions.php
2 weeks ago
wcml-switch-lang-request.php
2 weeks 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 |