2014-07-21 14 views
5

Mam 2 pytania dotyczące Woocommerce dla Wordpress.Woocommerce - Cena produktu w zależności od kraju

Pracuję na stronie, która sprzedaje głośniki na rynek duński.

Pytanie pierwsze:

mogę wykryć IP odwiedzającego i wykryć jakim kraju dana osoba jest z? Myślę, że można to zrobić za pomocą api ClientLocation.

Czy mogę wyłączyć wszystkie strony i przyciski z relacjami z zakupów, jeśli dana osoba nie jest z Danii. Fx: ukrywanie dodatku do koszyka, koszyka i kasy. Nadal chcę, aby osoby mogły zobaczyć ceny, nie powinny po prostu mieć możliwości ich zakupu.

Pytanie 2:

Powiedzmy to pytanie jeden został sucessfull wykonany. Następnie chciałbym pokazać różne ceny dla innych środków niż Dania. Więc jeśli odwiedzasz stronę z jednego kraju, cena wynosi XXX, a z innego kraju cena wynosi XXXX.
Powiedzmy:

In USA the price is = $500 
And in UK the price = £400 

(To nie ma nic wspólnego z waluty cena rynkowa jest tak różne w różnych krajach.).

szukałem w tej wtyczki: http://wordpress.org/plugins/woocomerce-price-by-country/ Pozwoliło mi napisz różne ceny dla każdego produktu, ale kiedy testuję to z http://geopeeker.com/, nie pracowałem w ogóle.

Czy możesz podać mi jakieś wskazówki lub linki do niektórych wtyczek, które znasz?

UPDATE

udało mi się rozwiązać pytanie 1. przechowywać kraj gości w pliku cookie z IP location XML API A potem może po prostu stworzyć if, mówiąc, że jeśli kraj nie był równy Danii, a następnie Dodaj do koszyka, koszyka itp. należy usunąć.

Więc tak, będę naprawdę wdzięczny, gdyby anyknow dać mi pomysł, w jaki sposób mogę rozwiązać pytanie w 2.

jestem w stanie wykryć kraj, ale nie jest w stanie określić cenę każdego produktu dany kraj. Aktualizacja

2'nd:

Wystarczy pozwolić wszelkie zainteresowani czytelnicy wiedzą, że skończyło się na zakup this plugin. który działa doskonale!

+1

Proszę sprawdzić odpowiedź –

Odpowiedz

4

do 2. części pytania: Jeżeli używasz tylko proste typy produktów (bez odmian), a następnie można dodać pola niestandardowe cena do strony danych produktów i filtrować za pomocą woocommerce_get_price_html cenę.

add_filter('woocommerce_get_price_html','so24863612_custom_price'); 
function so24863612_custom_price(){ 
    global $post; 
    $_postID = $post->ID; 
    $product = get_product($_postID); 
    $UK_price = get_post_meta($_postID, '_UK_price', true); //loads custom meta data 
    $return_price = $product->get_regular_price(); //default to regular price 
    if (!empty($UK_price)) { 
     $return_price = $UK_price; 
    } 
    return $return_price; 
} 

Można tworzyć i zapisywać pól niestandardowych na stronie produktu jak ten:

//Display custom fields on product data page in admin 
add_action('woocommerce_product_options_general_product_data', 'so24963039_display_custom_general_tab_fields'); 
function so24963039_display_custom_general_tab_fields() { 
    global $woocommerce, $post; 
    $UK_price = get_post_meta($post->ID, '_UK_price', true); 

    woocommerce_wp_text_input(
     array(
     'id' => '_UK_price', 
     'label' => __('UK Price (£)', 'woocommerce'), 
     'value' => $UK_price, 
     'desc_tip' => 'false' 
     ) 
    ); 
} 

//Save custom fields to access via get_post_meta 
add_action('woocommerce_process_product_meta', 'so24963039_save_custom_general_tab_fields'); 
function so24963039_save_custom_general_tab_fields ($post_id) { 

    $woocommerce_UK_price = $_POST['_UK_price']; 
    if(!empty($woocommerce_UK_price)) 
    update_post_meta($post_id, '_UK_price', esc_attr($woocommerce_UK_price)); 

} 

----------------- W przypadku produktów o Variations- ---------------------------

OSTRZEŻENIE: Produkty zmienne są znacznie bardziej skomplikowane i nie jestem prawie tak pewny w tej odpowiedzi tak jak ja z prostymi produktami część powyżej, ale tutaj jest moje obecne zrozumienie tak czy inaczej. Miałem pewne problemy z wyświetlaniem mini-cart, które musiałem włamać się przy użyciu tej metody (co wyjaśnię na końcu), ale sumy są obliczane poprawnie zarówno w mini-wózku, jak i zwykłym wózku.

Najpierw chcemy dodać nowe pola do każdego wariantu na karcie zmienności istniejących produktów:

add_action('woocommerce_product_after_variable_attributes', 'so24963039_variable_fields', 10, 2); //Display Fields 
function so24963039_variable_fields($loop, $variation_data) { 

echo '<tr><td>'; 
woocommerce_wp_text_input(
    array(
     'id' => '_variant_UK_price['.$loop.']', 
     'label' => __('UK Price (£)', 'woocommerce'), 
     'desc_tip' => 'false', 
     'value' => $variation_data['_variant_UK_price'][0] 
    ) 
); 
echo '</td></tr>'; 
} 

Musimy również dodać je dynamicznie, gdy użytkownik dodaje nowe warianty na stronie edycja produktu:

add_action('woocommerce_product_after_variable_attributes_js', 'so24963039_variable_fields_js'); //JS to add fields for dynamically added new variations 
function so24963039_variable_fields_js(){ //add fields to new variations that get added 
echo '<tr><td>'; 
woocommerce_wp_text_input(
    array(
     'id' => '_variant_UK_price[ + loop + ]', 
     'label' => __('UK Price (£)', 'woocommerce'), 
     'desc_tip' => 'false', 
     'value' => $variation_data['_variant_UK_price'][0] 
    ) 
); 
echo '</td></tr>'; 
} 

Następnie zapisz zmiany w polach niestandardowych w sprawie zmiany meta danych:

add_action('woocommerce_process_product_meta_variable', 'so24963039_save_variable_fields', 10, 1); //Save variation fields 
function so24963039_save_variable_fields($post_id) { 
if (isset($_POST['variable_sku'])) { 
    $variable_sku = $_POST['variable_sku']; 
    $variable_post_id = $_POST['variable_post_id']; 

    // Variant Tier 1 Price 
    $_variant_UK_price = $_POST['_variant_UK_price']; 
    for ($i = 0; $i < sizeof($variable_sku); $i++) { 
     $variation_id = (int) $variable_post_id[$i]; 
     if (isset($_variant_UK_price[$i])) { 
     update_post_meta($variation_id, '_variant_UK_price', stripslashes($_variant_UK_price[$i])); 
     } 
    } 
} 
} 

Teraz, gdy mamy nasze zwyczaj zmienności meta danych, możemy do niego dostęp w module zwyczaj cenowej tak:

add_filter('woocommerce_get_price_html','so24863612_custom_price'); 
function so24863612_custom_price(){ 
    global $post; 
    $_postID = $post->ID; 
    $product = get_product($_postID); 
    $product_type = $product->product_type; 

    $UK_price = get_post_meta($_postID, '_UK_price', true); //covers simple products 
    if($product_type == 'variation'){ //override with variant prices 
      $UK_price = get_post_meta($_postID, '_variant_$UK_price', true); 
    } 

    $return_price = $product->get_regular_price(); //default to regular price 
    if (!empty($UK_price)) { 
     $return_price = $UK_price; 
    } 
    return $return_price; 
} 

Teraz wierzę, że część powinna mieć wszystko działa z wyjątkiem wyświetlaczu mini-koszyka. Z jakiegoś powodu wydaje mi się, że po prostu nie mogłem wymyślić, jak uzyskać dostęp do danych meta wariacji, aby zmusić go do prawidłowego wyświetlania w mini koszyku - tak jak znalazłem miejsce, w którym generowany był ekran mini-cart, ale miałem problemy uzyskanie odpowiedniej ścieżki kontekstowej w celu uzyskania dostępu do zmiennej niestandardowej, więc musiałem to zrobić w szablonie-tags.php i przekazać tablicę wartości niestandardowych do opcjonalnego parametru w mojej funkcji ceny niestandardowej. To wydaje się bardzo "złe", jeśli chodzi o sposób, w jaki powinniśmy robić różne rzeczy, ale wykonuje to zadanie. Jestem bardzo otwarty na "właściwe" rozwiązanie tej części problemu.

W szablonach tags.php:

<div class="small-7 large-7 columns"><?php 
              $product_title = $_product->get_title(); 
              echo '<a class="cart_list_product_title" href="'.get_permalink($cart_item['product_id']).'">' . apply_filters('woocommerce_cart_widget_product_title', $product_title, $_product) . '</a>'; 
              echo '<div class="cart_list_product_price">'; 
              //original line: echo woocommerce_price($_product->get_price()); 

              /*Custom Price Override Block*/ 
              $_productID = $_product->id; 
              $product_type = $_product->product_type; 
              if($product_type == 'variation') { 
               $custom_field_data = $_product->product_custom_fields; 
               $regular_price = $custom_field_data['_regular_price']; 
               $custom_UK_price = $custom_field_data['_variant_UK_price']; 
               $custom_variant_prices = [$regular_price[0], $custom_UK_price[0]]; 
               echo so24863612_get_custom_price($_productID, $custom_variant_prices); 
              } else { 
               echo so24863612_get_custom_price($_productID); 
              } 
              /*End Custom Price Override Block*/ 

              echo ' /</div>'; 
              echo '<div class="cart_list_product_quantity">'.__('Quantity', 'woocommerce').': '.$cart_item['quantity'].'</div>'; 

             ?></div> 
+0

cześć. Dziękuję za Twoją odpowiedź.I przepraszam za spóźnioną odpowiedź. Niestety mam odmiany produktów, a nie tylko proste produkty. – Adnaves

+0

Obawiałem się, że to powiesz. Mój klient potrzebował tego samego i zmagałem się z tym przez tydzień. Pracowałem, ale jest trochę odurzający, jeśli chodzi o wyświetlacz mini-cart. (Musiałem edytować plik szablonu zamiast naprawiać go za pomocą haka, ponieważ nie mogłem się dowiedzieć, jak uzyskać dostęp do wariantu danych meta z mojej wtyczki). Daj mi znać, jeśli zdarzy ci się wymyślić lepszy sposób to zrobić! – FascistDonut

+1

Dziękuję. To ma mnie daleko! Ale nadal nie przekroczyłem linii mety. Ale akceptuję twoją odpowiedź. Dzięki za całą pomoc. Dam ci znać, jeśli znajdę zoptymalizowany sposób. – Adnaves

1

Widzę twoją aktualizację, że udało ci się zdobyć kraj odwiedzającego i możesz użyć jej do utworzenia instrukcji if, aby usunąć koszyk. (co jest w porządku, nawiasem mówiąc)

Czy to nie odpowiada na twoje pytanie 2, dotyczące zmiany cen dla każdego odwiedzającego? Wszystko, co musisz zrobić, to upewnić się, że obie ceny są gdzieś przechowywane, a następnie po prostu mieć to echo w Danii lub Wielkiej Brytanii.

Ceny są specyficzne - niestandardowe pola

Wspomniałeś to nie jest konwersja walut - więc trzeba przechowywać zarówno wartości. Dodaj niestandardowe pole do wpisu produktu, który edytujesz z nową ceną, i nadaj mu nazwę "denmarkprice" lub coś w rodzaju:

Nie jestem w 100% wystarczająco zaznajomiony z WooCommerce, aby powiedzieć, która wtyczka pola niestandardowego może działać, ale możesz użyj http://www.advancedcustomfields.com/, jeśli nie chcesz po prostu samodzielnie tworzyć pola niestandardowego i wywoływać zmienną za pomocą the_meta(), gdy chcesz wyświetlić je wewnątrz instrukcji if else.

http://codex.wordpress.org/Custom_Fields

Powiązane problemy