2014-07-21 24 views
5

Tôi có 2 câu hỏi liên quan đến Woocommerce cho Wordpress.Woocommerce - Giá sản phẩm tùy theo quốc gia

Tôi đang làm việc trên một trang web bán loa cho thị trường Đan Mạch.

Câu hỏi một:

Tôi có thể phát hiện các chỉ IP của một người truy cập và phát hiện nước nào người đó là từ đâu? Tôi đoán điều này có thể được thực hiện với một số api ClientLocation.

Sau đó tôi có thể vô hiệu hóa tất cả các trang và nút liên kết mua sắm nếu một người không phải từ Đan Mạch. Fx: ẩn thêm vào giỏ hàng, giỏ hàng và thanh toán. Tôi vẫn muốn những người có thể xem giá, họ chỉ nên không có tùy chọn để mua chúng.

Câu hỏi 2:

Cho phép nói rằng câu hỏi ai bị sucessfull thực hiện. Sau đó, tôi muốn hiển thị các mức giá khác nhau cho các contries khác so với Đan Mạch. Vì vậy, nếu bạn đang truy cập trang web từ một quốc gia, giá là XXX và từ một quốc gia khác, giá là XXXX.
Hãy nói rằng:

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

(này không có gì để làm với tệ Giá thị trường là chỉ khác nhau ở các nước khác nhau..)

Tôi đã nhìn vào plugin này: http://wordpress.org/plugins/woocomerce-price-by-country/ Nó cho phép tôi viết giá khác nhau cho mỗi sản phẩm, nhưng khi tôi thử nghiệm nó với http://geopeeker.com/ tôi đã không làm việc ở tất cả.

Bạn có thể cho tôi biết một số điểm hoặc một số liên kết đến một số plugin mà bạn biết không?

CẬP NHẬT

tôi quản lý để giải quyết câu hỏi 1. Tôi lưu trữ các du khách nước trong một cookie với IP location XML API Và sau đó tôi chỉ có thể tạo ra một câu lệnh if, nói rằng nếu nước này không phải là tương đương với Đan Mạch, sau đó thêm vào giỏ hàng, giỏ hàng, v.v. cần được loại bỏ.

Vì vậy, yeah, tôi thực sự sẽ đánh giá cao nếu anyknow thể cho tôi một ý tưởng về làm thế nào tôi có thể giải quyết câu hỏi 2.

tôi có thể phát hiện cả nước, nhưng không thể xác định một mức giá của từng sản phẩm để quốc gia đã cho. cập nhật

2'nd:

Chỉ cần để cho bất kỳ độc giả quan tâm đã biết, tôi đã kết thúc mua this plugin. mà là làm việc một cách hoàn hảo!

+1

Vui lòng kiểm tra câu trả lời –

Trả lời

4

Đối với phần 2 của câu hỏi của bạn: Nếu bạn chỉ sử dụng các loại sản phẩm đơn giản (không có biến thể) sau đó bạn có thể thêm các trường giá tùy chỉnh để trang dữ liệu sản phẩm và lọc giá bằng cách sử dụng woocommerce_get_price_html.

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; 
} 

Bạn có thể tạo và lưu các lĩnh vực tùy chỉnh trên trang sản phẩm như thế này:

//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)); 

} 

----------------- Đối với sản phẩm với Variations- ---------------------------

CẢNH BÁO: Các sản phẩm biến phức tạp hơn nhiều và tôi gần như không tự tin trong câu trả lời này như tôi với phần sản phẩm đơn giản ở trên, nhưng đây là cách hiểu hiện tại của tôi. Tôi đã có một số vấn đề hiển thị giỏ hàng nhỏ mà tôi đã phải hack xung quanh khi sử dụng phương pháp này (mà tôi sẽ giải thích ở cuối), nhưng tổng số được tính toán chính xác trong cả giỏ hàng nhỏ và giỏ hàng thông thường.

Đầu tiên chúng tôi muốn thêm lĩnh vực mới để mỗi biến trên tab biến thể của sản phẩm hiện có:

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>'; 
} 

Chúng tôi cũng cần phải thêm chúng tự động bất cứ khi nào người dùng thêm các biến thể mới trên trang chỉnh sửa sản phẩm:

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>'; 
} 

Sau đó, chúng tôi lưu thay đổi đối với các lĩnh vực tùy chỉnh trong các dữ liệu meta biến:

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])); 
     } 
    } 
} 
} 

Bây giờ chúng ta có dữ liệu meta biến tùy chỉnh của chúng tôi, chúng ta có thể truy cập vào nó trong module giá tùy chỉnh như sau:

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; 
} 

Bây giờ, tôi tin rằng một phần nên có tất cả mọi thứ làm việc ngoại trừ màn hình mini-giỏ hàng. Đối với một số lý do, có vẻ như tôi không thể tìm ra cách truy cập vào dữ liệu meta biến đổi để buộc nó hiển thị đúng cách trong giỏ hàng nhỏ - như tôi thấy nơi màn hình giỏ hàng nhỏ đang được tạo nhưng tôi gặp sự cố nhận được đường dẫn ngữ cảnh thích hợp để truy cập biến tùy chỉnh vì vậy tôi đã phải làm điều đó trong template-tags.php và chuyển một mảng các giá trị tùy chỉnh tới một tham số tùy chọn trong hàm giá tùy chỉnh của tôi. Điều này cảm thấy rất 'sai' về cách chúng ta nên làm mọi thứ, nhưng nó được hoàn thành công việc. Tôi rất cởi mở khi nghe giải pháp 'đúng' cho phần này của vấn đề.

Trong template-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

Hi. Cảm ơn bạn vì câu trả lời.Và tôi xin lỗi vì trả lời muộn. Rất tiếc, tôi có các biến thể sản phẩm và không chỉ các sản phẩm đơn giản. – Adnaves

+0

Tôi sợ bạn sẽ nói điều đó. Khách hàng của tôi cần điều tương tự và tôi phải vật lộn với nó trong một tuần hoặc lâu hơn. Tôi nhận được nó làm việc, nhưng nó là một chút hacky khi nói đến màn hình mini-cart. (Tôi đã phải chỉnh sửa một tệp mẫu thay vì sửa nó bằng một móc vì tôi không thể tìm ra cách để truy cập vào siêu dữ liệu biến thể từ trong plugin của tôi) Hãy cho tôi biết nếu bạn tình cờ tìm ra một cách để làm điều đó! – FascistDonut

+1

Cảm ơn bạn. Điều đó đã cho tôi xa! Nhưng tôi vẫn chưa vượt qua vạch đích. Nhưng tôi đã chấp nhận câu trả lời của bạn. Cảm ơn vì sự giúp đỡ. Tôi sẽ cho bạn biết nếu tôi tìm thấy một cách tối ưu. – Adnaves

1

Tôi thấy bản cập nhật mà bạn đã quản lý để có được quốc gia của khách truy cập và bạn có thể sử dụng điều này để tạo câu lệnh if để xóa giỏ hàng. (mà là freaking mát, bằng cách này)

Điều đó không trả lời câu hỏi của bạn 2, về việc thay đổi giá cho mỗi khách truy cập? Tất cả bạn phải làm là đảm bảo rằng cả hai giá được lưu trữ ở đâu đó, và sau đó chỉ cần có nó vang lên Đan Mạch hoặc Vương quốc Anh.

Giá cả cụ thể - lĩnh vực tùy chỉnh

Bạn nói điều này là không chuyển đổi tiền tệ - vì vậy bạn cần lưu trữ cả hai giá trị. Thêm trường tùy chỉnh vào mục nhập sản phẩm mà bạn chỉnh sửa với giá mới đó và đặt tên là "denmarkprice" hoặc một cái gì đó là

Tôi không đủ 100% quen với WooCommerce để nói plugin lĩnh vực tùy chỉnh nào có thể hoạt động, nhưng bạn có thể sử dụng http://www.advancedcustomfields.com/ nếu bạn không muốn chỉ tạo trường tùy chỉnh và gọi biến với the_meta() khi bạn muốn hiển thị biến đó trong câu lệnh if else của bạn.

http://codex.wordpress.org/Custom_Fields

Các vấn đề liên quan