programing

Woocommerce: 사용자 입력에 따른 맞춤 가격

codeshow 2023. 4. 2. 11:42
반응형

Woocommerce: 사용자 입력에 따른 맞춤 가격

나는 여기에 글을 올리고 싶지 않았지만 내가 찾던 답을 찾을 수 없었고 나의 정확한 답변을 얻기 위해 다른 매우 유사한 질문들에 대해 언급할 충분한 평판이 없다.

이 투고에서 거의 완벽한 답을 찾았습니다.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);
        }
    }
}

도움이 되는 조언 감사합니다!

나는 우아하지는 않지만 내 목적에 맞는 해결책을 찾았다.

이전에 쿠키를 사용하려고 했는데 쿠키 경로를 설정하지 않았기 때문에 쿠키 경로가 설정된 페이지에서만 사용할 수 있습니다.

기부금액을 쿠키로 설정하고 있습니다.

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

나도 똑같은 걸 찾고 있었어이 WooCommerce 플러그인(무료 아님)을 찾았습니다.

가격 플러그인 이름 지정

처음에는 이와 같은 플러그인을 찾기 위해 어떤 검색어를 사용해야 할지 잘 몰랐지만, "WooCommerce name your price"는 유사한 플러그인의 다른 소스에 대한 링크를 불러오는 것 같습니다.

[댓글입니다]쿠키는 어디에 세팅해요?첫 번째 추측으로는 가 GET 메서드를 사용하여 같은 페이지에서 새로고침하고 쿠키를 설정하기 위한 $_GET['donation']를 사용하여 PHP 코드 블록을 제공하는 것입니다.쿠키가 설정되면 페이지를 Woocommerce Cart 페이지로 리다이렉트하여 쇼핑 프로세스를 계속 진행합니다.더 쉬운 방법이 있다면 알려주세요.감사해요.

죄송합니다. 포인트가 부족하여 선택된 답변에 댓글을 달 수 없습니다.

이 코드는 커스텀 가격으로 주문을 작성합니다.

$product = wc_get_product($product_id);
$order = wc_create_order();
try {
    $order->add_product($product);
    //$order->set_customer_id($user->ID);
    $order->set_billing_email($customer_email);
} catch (WC_Data_Exception $e) {
    wp_send_json_error("Failed to create order");
}

$order->calculate_totals();    

try {
    $order->set_total($custom_price); // $custom_price should be float value
} catch (WC_Data_Exception $e) {
    wp_send_json_error("Failed to change order details");
}

$order->save();

$order->update_status( 'completed' );

언급URL : https://stackoverflow.com/questions/21742630/woocommerce-custom-price-based-on-user-input

반응형