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.