web-dev-qa-db-ja.com

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

ハードコードされたカスタム価格を設定した場合、それはうまく機能します。

私の質問は:ユーザー入力に基づいてカスタム価格を設定するにはどうすればよいですか?

私は情報を渡すために考えられるあらゆる方法を試しましたが(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);
        }
    }
}

役立つアドバイスを事前に感謝します!

13
Bullyen

私はエレガントではないが私の目的のために働く解決策を見つけました。

以前に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']);
        }
    }
}
11
Bullyen

私はまったく同じものを探していました。私はこれのためにこのWooCommerceプラグイン(無料ではありません)を見つけました

価格プラグインに名前を付けます

最初は、このようなプラグインを見つけるためにどの検索用語を使用するかわかりませんでしたが、「WooCommerce name your price」は、同様のプラグインの他のソースへのリンクを表示するようです。

3
batman42ca

【コメントです】クッキーはどこにセットしますか?私の最初の推測は、GETメソッドを使用して同じページで更新し、Cookieを設定するためのPHP code-block with $ _GET ['donation']を提供することです。そして、Cookieが設定されたら、ページをWoocommerce Cartページにリダイレクトして、ショッピングプロセスを続行します。もっと簡単な方法で行っている場合は、お知らせください。ありがとうございます。

申し訳ありませんが、ポイントが不足しているため、選択した回答へのコメントとして投稿できませんでした。

1
Amin Darvand