Cena niestandardowa WooCommerce za pomocą funkcji get_price ()

Obecnie bawię się z wykorzystaniem wielu cen / walut w zależności od lokalizacji użytkownika. Przechodzę przez cały proces zamawiania i prawie tam jestem.

Używamget_price() funkcja do zaczepieniawoocommerce_get_price (położony wclass-wc-product.php, wiersz 822), a następnie znajdź niestandardowe kwoty pól, które ustawiłem (gb_price, us_price itp.) z produktu.

Wszystko działa dobrze w sklepie, widok pojedynczego produktu, koszyk, zamówienie, ale przy składaniu zamówienia wszystko to powraca do domyślnego kosztu podstawowego i waluty. Zauważyłem, że to się nie powiedzie tylko wtedy, gdy zaczepiasz się przez funkcje. Jeśli poprawię samą funkcję bezpośrednio w pliku klasy, wszystko działa idealnie.

Naprawdę nie chcę odrywać się od rdzenia WC, więc czy ktoś może spojrzeć i powiedzieć, dlaczego się nie powiedzie? Oto mój kod ...

klasa-wc-product.php

function get_price() {  
    return apply_filters( 'woocommerce_get_price', $this->price, $this );
}

functions.php

add_filter('woocommerce_get_price', 'return_custom_price', $product, 2); 
function return_custom_price($price, $product) {    
    global $post, $woocommerce;
    // Grab the product id
    $post_id = $product->id; 
    // Get user's ip location and correspond it to the custom field key
    $user_country = $_SESSION['user_location'];
    $get_user_currency = strtolower($user_country.'_price');
    // If the IP detection is enabled look for the correct price
    if($get_user_currency!=''){
        $new_price = get_post_meta($post_id, $get_user_currency, true);
        if($new_price==''){
            $new_price = $price;
        }
    }
    return $new_price;
}   

Więc to działa wszędzie oprócz potwierdzenia zamówienia. Jeśli po prostu przeniosę funkcję z functions.php do samej klasy w get_price (), działa ona idealnie.

questionAnswers(1)

yourAnswerToTheQuestion