2014-02-13 2 views
11

나는 여기에 게시하고 싶지 않았지만 내가 찾고있는 답변을 찾을 수 없었고 나의 정확한 대답을 얻기 위해 다른 VERY SIMILAR 질문에 대해 논평하는 데 충분한 명성이 없습니다. WooCommerce: Add product to cart with price override?Woocommerce : 사용자 입력을 기반으로 한 사용자 정의 가격

코드를 사용하여 :

은이 게시물에서 거의 완벽한 해답을 발견

add_action('woocommerce_before_calculate_totals', 'add_custom_price'); 

function add_custom_price($cart_object) { 
     $custom_price = 10; // This will be your custome price 
     foreach ($cart_object->cart_contents as $key => $value) { 
      $value['data']->price = $custom_price; 
     } 
} 

과 하드 코드 된 사용자 정의 가격을 설정 한 경우는 ... 잘 작동합니다.

내 질문 : 사용자 입력을 기반으로 맞춤형 가격을 어떻게 설정할 수 있습니까?

나는 정보를 전달할 수있는 모든 방법을 시도했으며 (쿠키, 전역, 세션을 사용해 보았습니다.) 아무도 내가 원했던 방식으로 작동하지 않았으며 모든 것이 해킹으로 이루어졌습니다.

해당 제품은 기부이며 고객은 사용자가 정가가 설정된 가변 제품을 만드는 것보다는 기부 가격을 설정할 수 있기를 원합니다.

$donation_success = $woocommerce->cart->add_to_cart($donation_id); 

내 기부 제품은이 추가됩니다 그래서 0.00의 세트 가격을 가지고 : 사용자가 내가 지금처럼 장바구니에 기부 제품을 추가하고 기부 양식을 제출 기부 페이지에서

카트 가격이 0.00입니다. (이 시점에서 가격이 정해져 있는지 모르겠습니다.)

나는이 시점에서 배열을 허용하는 add_to_cart 메소드의 마지막 변수를 사용하여 정보를 전달하려고 시도했습니다. 논쟁을하지만, 나는 그 중 하나를 작동시키지 못했습니다.

나는 대답이 간단하다고 확신하지만이 작업을 수행하는 데 몇 시간 씩 노력하고 있으며 제대로 작동하지 않습니다. 나는 아이디어가 없다.

내가 지금 사용하고 실제 코드는 같은 위 게시물의 응답자에 의해 제안 된보다 약간 다르지만 기본적으로 작동합니다 어떤 도움이되는 조언을 사전에

add_action('woocommerce_before_calculate_totals', 'woo_add_donation'); 

function woo_add_donation() { 
    global $woocommerce; 

    $donation = 10; 
    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) { 
     if($cart_item['data']->id == 358 || $cart_item['data']->id == 360){ 
      $cart_item['data']->set_price($donation); 
     } 
    } 
} 

감사합니다!

답변

9

나는 우아하지는 않지만 내 목적을 위해 작동하는 해결책을 발견했습니다.

이전에 쿠키를 사용하려고했지만 쿠키 경로를 설정하지 않았으므로 쿠키가 설정된 페이지에서만 사용할 수있었습니다.그런 다음

setcookie("donation", $_GET['donation'], 0, "/"); 

내가 지금처럼 가격을 설정하고 있습니다 :

지금 기부 가격으로 쿠키를 설정하고

add_action('woocommerce_before_calculate_totals', 'woo_add_donation'); 

function woo_add_donation() { 
    global $woocommerce; 

    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) { 
     if($cart_item['data']->id == 358 && ! empty($_COOKIE['donation'])){ 
      $cart_item['data']->set_price($_COOKIE['donation']); 
     } 
    } 
} 
+1

내가 찾는 것! 나는 무의미한 기능을 변경하려고 무수한 시간을 보냈다. 이것은 완벽하게 작동하고 가격을 변경 :) 다시 한번 많은 감사! – shish

+0

API 요청을 통해 제품을 추가 할 때 어떻게이 기능을 광고 할 수 있습니까? –

3

나는 똑같은 것을 찾고있었습니다. 나는 처음에 나는이 같은 플러그인을 찾기 위해 사용하는 어떤 검색어 확실하지 않았다하지만에 대한 링크를 제공합니다 "가격을 이름을 WooCommerce"처럼 보이는이

name your price plugin

이 WooCommerce 플러그인 (무료되지 않음) 발견 유사한 플러그인의 다른 출처.

+0

감사합니다. 배트맨. 우리는 실제로이 플러그인을 가지고 있으며 정상적인 제품에는 잘 작동합니다. 그러나 나는 이것을 일반 상점 밖에서 사용할 방법을 찾을 수 없었다. 다른 방법을 찾아 낼 수 없으면 이것을 사용하게 될 수도 있습니다. – Bullyen

+0

@James - 저는 사실 Name Your Price 플러그인의 저자입니다. 나는 "평범한 가게 밖"이라는 뜻을 궁금해하니? 어디에서 사용하고 싶습니까? WooCommerce 2.1은 쇼트 코드에 이름의 가격을 사용하는 것과 관련된 모든 문제를 해결 했으므로 원하는 곳 어디에서나 배치 할 수 있습니다. – helgatheviking

+0

@helgatheviking - 간단한 텍스트 필드와 "금액"레이블이있는 기부 페이지를 설정해야했습니다. 나는 짧은 코드와 함께 올 것이라고 생각하는 슬라이더 또는 다른 기능을 포함 시키려하지 않았습니다. 나는 상점 밖에서 플러그인을 사용할 수 있었지만 (이 플러그인은 여러 다른 사이트에서 사용함) 실제로이 인스턴스에서 찾고자했던 플러그인이 아닙니다. 아마도 그랬을 뿐이고 나는 할 수있는 모든 것을 알지 못했습니다. 참고하시기 바랍니다 : 이것은 처음으로 WordPress 및 WooCommerce 사이트 였으므로 새로운 정보에 약간 압도되어 "잘못"되었거나 단어가 아닌 것 같았습니다. – Bullyen

1

을 [이 주석입니다] 당신이 쿠키를 설정하는 경우 ? 내 첫 번째 추측은 GET 메소드를 사용하여 동일한 페이지에서 새로 고치고 $ _GET [ 'donation']을 사용하여 쿠키를 설정하는 PHP 코드 블록을 제공한다는 것입니다. 그런 다음 쿠키가 설정되면 Woocommerce Cart 페이지로 리다이렉트하여 쇼핑 프로세스를 계속 진행합니다. 더 쉬운 방법이라면 알려주세요. 감사.

죄송합니다. 제가 답변을 잘못 선택했기 때문에 답변을 올릴 수 없습니다.

관련 문제