programing

Woocommerce - 국가별 제품 가격

showcode 2023. 6. 14. 22:00
반응형

Woocommerce - 국가별 제품 가격

Wordpress의 Woocommerce와 관련하여 2가지 질문이 있습니다.

덴마크 시장에 스피커를 판매하는 사이트에서 일하고 있습니다.

질문 1:

방문자의 IP를 탐지하고 그 사람이 어느 나라 사람인지 탐지할 수 있습니까?클라이언트 위치 API를 사용하면 이 작업을 수행할 수 있습니다.

덴마크 사람이 아닌 경우 모든 쇼핑 관련 페이지와 단추를 비활성화할 수 있습니까?Fx: 카트, 카트 및 체크아웃에 추가를 숨깁니다.저는 여전히 그 사람들이 가격을 볼 수 있기를 바랍니다, 그들은 단지 그것들을 살 수 있는 선택권이 없어야 합니다.

질문 2:

1번 질문이 성공적으로 이루어졌다고 가정해 보겠습니다.그렇다면 덴마크 이외의 다른 나라의 가격을 보여드리고 싶습니다.따라서 한 국가에서 사이트를 방문할 경우 가격은 XXX이고 다른 국가에서 사이트를 방문할 경우 가격은 XXX입니다.
예를 들어,

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

(이것은 통화와 관련이 없습니다.국가마다 시장 가격이 다를 뿐입니다.)

저는 이 플러그인을 살펴보았습니다: http://wordpress.org/plugins/woocomerce-price-by-country/ 은 제품별로 다른 가격을 작성할 수 있게 해주었지만, http://geopeeker.com/ 과 함께 테스트해보니 전혀 일하지 않았습니다.

당신이 알고 있는 플러그인에 대한 몇 가지 포인트나 링크를 주시겠습니까?

갱신하다

저는 문제 1을 풀었습니다.방문자 국가를 IP 위치 XML API가 포함된 쿠키에 저장한 다음 if 문을 만들면 국가가 덴마크와 같지 않으면 카트, 카트 등에 추가를 제거해야 합니다.

그래서 네, 제가 2번 문제를 어떻게 풀 수 있는지에 대한 아이디어를 주시면 정말 감사하겠습니다.

국가를 감지할 수는 있지만 해당 국가에 대한 각 제품의 가격을 지정할 수는 없습니다.

2차 업데이트:

관심 있는 독자들에게 알려주기 위해, 저는 플러그인을 구매하게 되었습니다.완벽하게 작동하고 있습니다!

질문의 두 번째 부분:단순한 제품 유형(변동 없음)만 사용하는 경우 제품 데이터 페이지에 사용자 지정 가격 필드를 추가하고 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;
}

제품 페이지에서 다음과 같은 사용자 정의 필드를 생성하고 저장할 수 있습니다.

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

}

------------------------------------------------------- 변형이 있는 제품의 경우

경고: 가변 제품은 훨씬 더 복잡하며 위의 단순한 제품 부분만큼 이 답변에 자신이 없지만, 어느 쪽이든 제가 현재 이해하고 있는 내용은 다음과 같습니다.이 방법을 사용할 때 몇 가지 미니 카트 디스플레이 문제를 해결해야 했지만(마지막으로 설명), 미니 카트와 일반 카트 모두에서 총계가 정확하게 계산됩니다.

먼저 기존 제품의 변동 탭에 있는 각 변형에 새 필드를 추가합니다.

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

또한 사용자가 제품 편집 페이지에서 새 변형을 추가할 때마다 동적으로 추가해야 합니다.

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

그런 다음 변형 메타데이터의 사용자 정의 필드에 대한 변경 내용을 저장합니다.

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

이제 맞춤형 변형 메타데이터가 있으므로 맞춤형 가격 모듈에서 다음과 같이 액세스할 수 있습니다.

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

이제, 그 부분은 미니 카트 디스플레이를 제외한 모든 것이 작동해야 한다고 생각합니다.미니 카트 디스플레이가 생성되는 위치를 찾았지만 사용자 지정 변수에 액세스하기 위한 올바른 컨텍스트 경로를 찾는 데 어려움을 겪었기 때문에 변형 메타 데이터에 액세스하는 방법을 찾을 수 없었던 것 같습니다.템플릿을 사용한php를 사용하여 사용자 정의 값 배열을 사용자 정의 가격 함수의 선택적 매개 변수로 전달합니다.이것은 우리가 어떻게 해야 하는지에 대한 관점에서 매우 '잘못된' 느낌이지만, 그것은 일을 완수합니다.저는 이 부분의 문제에 대한 '올바른' 해결책을 듣는 것에 대해 매우 개방적입니다.

템플릿 태그에 있습니다.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>

방문자의 국가를 얻는 데 성공했고 카트를 제거하기 위한 if 문을 만드는 데 사용할 수 있다는 당신의 업데이트를 봅니다.(그건 그렇고, 정말 멋져요)

방문자별 가격 변경에 대한 당신의 질문 2에 대한 답변이 되지 않습니까?당신이 해야 할 일은 두 가격이 모두 어딘가에 저장되어 있는지 확인한 다음 덴마크나 영국의 가격과 일치하도록 하는 것입니다.

가격은 특정 - 사용자 지정 필드

통화 변환이 아니라고 말씀하셨으므로 두 값을 모두 저장해야 합니다.새 가격으로 편집하는 제품 항목에 사용자 지정 필드를 추가하고 "가격 표시" 또는 다른 이름을 지정합니다.

나는 어떤 커스텀 필드 플러그인이 작동할 수 있는지 말할 정도로 WooCommerce에 100% 익숙하지 않지만, 만약 당신이 직접 커스텀 필드를 만들고 싶지 않다면, 당신은 http://www.advancedcustomfields.com/ 를 사용할 수 있고, 만약 당신이 ifelse 문 안에 변수를 표시하고 싶을 때 _filename으로 변수를 호출할 수 있습니다.

http://codex.wordpress.org/Custom_Fields

언급URL : https://stackoverflow.com/questions/24863612/woocommerce-product-price-depending-on-country

반응형