WPML
상태
미해결
보고된 제품
WPML Multilingual & Multicurrency for WooCommerce 5.3.2
관련 플러그인/테마
WooCommerce Subscriptions
주제 태그
Compatibility, WCML

문제 개요

WooCommerce Subscriptions에서 구독을 업데이트할 때(업그레이드, 다운그레이드 또는 크로스그레이드 여부와 관계없이) 가격이 올바르게 필터링되지 않습니다. 이로 인해 구독 요금제를 변경하는 동안 잘못된 가격이 적용됩니다.

임시 해결 방법

진행하기 전에 사이트를 전체 백업하세요.


  • …/wp-content/plugins/woocommerce-multilingual/compatibility/WcSubscriptions/MulticurrencyHooks.php 파일을 여세요.

  • 253번째 줄을 찾으세요.

  • 변경 전:
    	public function woocommerce_subscription_price_from( $price, $product ) {
    		if ( $product instanceof WC_Product_Subscription_Variation ) {
    			$customPricesOn = get_post_meta( $product->get_id(), '_wcml_custom_prices_status', true );
    
    			if ( $customPricesOn ) {
    				$price = get_post_meta( $product->get_id(), '_price_' . $this->woocommerce_wpml->multi_currency->get_client_currency(), true );
    			} else {
    				$price = apply_filters( 'wcml_raw_price_amount', $price );
    			}
    		}
    
    		return $price;
    	}

  • 변경 후:
    	public function woocommerce_subscription_price_from( $price, $product ) {
    		if ( $product instanceof WC_Product_Subscription_Variation || $product instanceof \WC_Product_Subscription) {
    			$customPricesOn = get_post_meta( $product->get_id(), '_wcml_custom_prices_status', true );
    
    			if ( $customPricesOn ) {
    				$price = get_post_meta( $product->get_id(), '_price_' . $this->woocommerce_wpml->multi_currency->get_client_currency(), true );
    			} else {
                    $id = $product->get_id();
                    $type = get_post_type($id);
    				$trid = apply_filters( 'wpml_element_trid', NULL, $id,  'post_'.$type );
    				$translations = apply_filters( 'wpml_get_element_translations', NULL, $trid , 'post_'.$type );
                    foreach ($translations as $translation){
                        if ($translation->original == 1){
                            if ( get_post_meta( $translation->element_id, '_wcml_custom_prices_status', true ) ) {
    	                        $price = get_post_meta( $translation->element_id, '_price_' . $this->woocommerce_wpml->multi_currency->get_client_currency(), true );
                            } else {
    	                        $price = apply_filters( 'wcml_raw_price_amount', $price );
                            }
                        }
                    }
                }
    		}
    
    		return (int)$price;
    	}

알려진 모든 문제 →