2014-02-13 59 views
11

我不想在這裏發佈,但我找不到我正在尋找的答案,我沒有足夠的信譽來評論其他非常類似的問題以獲得我的確切答案。Woocommerce:基於用戶輸入的自定義價格

我發現這個職位幾乎完美的答案:使用代碼WooCommerce: Add product to cart with price override?

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

和它的偉大工程......如果你設置一個硬編碼的自定義價格。

我的問題是:如何根據用戶輸入設置自定義價格?

我都想盡辦法,我能想到的將信息傳遞(我甚至使用cookie,全局,會話試過),沒有他們的工作,我想如何和他們都是,充其量黑客。

有問題的特定產品是捐款,客戶希望用戶能夠設置捐贈價格(而不是僅創建具有設定價格點的可變產品)。

在當用戶提交的捐款表格我加入捐贈產品加入購物車,像這樣的捐款網頁:

$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

我發現了一個不太優雅的解決方案,但它適用於我的目的。

我之前嘗試使用cookie,但沒有設置cookie路徑,因此它只能用於設置的頁面。

我現在設置與捐贈價格的cookie:

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應該已經解決了在簡碼中使用Name Your Price的任何問題,因此您可以將它放在幾乎任何你想要的地方。 – helgatheviking

+0

@helgatheviking - 我需要使用簡單的文本字段和「金額」標籤設置捐贈頁面。我並不想要包含一個滑塊或其他任何我認爲伴隨着短代碼的功能。我能夠在店外使用你的插件(並且我們在多個其他網站中使用它),但在這種情況下,它並不是我真正想要的。也許是這樣,我只是不知道它可以做的所有事情。僅供參考:這實際上是我的第一個WordPress和WooCommerce網站,所以我有點不知所措,有新的信息,並做了「錯誤」/非wordpressy的一些事情 – Bullyen

1

[這是一條評論]你在哪裏設置cookie ?我的第一個猜測是,使用GET方法刷新同一頁面,並提供一個帶有$ _GET ['donation']的PHP代碼塊來設置Cookie。 然後,一旦cookie被設置,您將頁面重定向到Woocommerce購物車頁面以繼續購物過程。如果您正在以更簡單的方式進行操作,請告訴我。謝謝。

對不起,由於缺乏積分,我無法將其作爲所選答案的評論發佈。

相關問題