web-dev-qa-db-ja.com

WooCommerce:価格を上書きして商品をカートに追加しますか?

$replace_order = new WC_Cart();
$replace_order->empty_cart( true );
$replace_order->add_to_cart( "256", "1");

上記のコードは製品を追加します256カートへ1時間。しかし、私が抱えている問題は、製品の価格を完全にオーバーライドできるようにすることです...私が知る限り、できることはカートにクーポンを適用することだけです。

価格を完全にカスタムのものに完全にオーバーライドする方法はありますか?

35
dcolumbus

カート内の製品の価格をオーバーライドするコードは次のとおりです

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;
        // for WooCommerce version 3+ use: 
        // $value['data']->set_price($custom_price);
    }
}

それが役に立つことを願っています...

51

上記のコードで、製品IDを確認するためのifステートメントを導入する必要があります。

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) {
    $custom_price = 10; // This will be your custome price  
    $target_product_id = 598;
    foreach ( $cart_object->cart_contents as $value ) {
        if ( $value['product_id'] == $target_product_id ) {
            $value['data']->price = $custom_price;
        }
        /*
        // If your target product is a variation
        if ( $value['variation_id'] == $target_product_id ) {
            $value['data']->price = $custom_price;
        }
        */
    }
}

このコードをどこかに追加し、このコードが常に実行可能であることを確認してください。

このコードを追加した後、呼び出すとき:

global $woocommerce; 
$woocommerce->cart->add_to_cart(598);

この商品のみが価格が上書きされて追加され、カートに追加された他の商品は価格が上書きされても無視されます。

これが役に立てば幸いです。

43

上記のすべてのコードサンプルを試してみましたが、最新のwoocommerce 3.0は上記の例のいずれもサポートしていません。以下のコードを使用して、私のために完璧に動作します。

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) {
    $custom_price = 10; // This will be your custom price  
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        $cart_item['data']->set_price($custom_price);   
    }
}
12
Saran

Woocommerceバージョン3.0.0のリリース後、set_price($ price)関数を使用してカートに追加すると製品価格が更新されます。以下に例を示します。

add_action( 'woocommerce_before_calculate_totals', 'mj_custom_price' );

function mj_custom_price( $cart_object ) {
   $woo_ver = WC()->version; 
   $custom_price = 10;
   foreach ( $cart_object->cart_contents as $key => $value )
   {
       if($woo_ver < "3.0.0" && $woo_ver < "2.7.0")
       {
           $value['data']->price = $custom_price;
       }
       else
       {
           $value['data']->set_price($custom_price);
       }
   }            
}

どうもありがとう

6
Mohd Jafar

WordpressおよびWoocommerceの最新バージョンについては、このように使用してください

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) {
    foreach ( $cart_object->cart_contents as $key => $value ) {
        $custom_price = 5;
        $value['data']->set_price($custom_price); 
    }
}
3
sumon cse-sust

動的にする(カート内の各アイテムの価格を個別にオーバーライドする)には、woocommerce_add_to_cartフック。

これらのセッション値を使用することにより、正しいカート合計を計算し、変更された価格を注文アイテムにも表示できます

1
Sark

WooCommerce 2.5では、これは2つの部分からなるプロセスであることがわかりました。最初のステップは、woocommerce_add_cart_itemフィルターを介してカートに追加されたときに、価格設定の実行時表示を変更することです。 2番目の部分は、woocommerce_get_cart_item_from_sessionフィルターを介してチェックアウト中に読み取られる永続的なセッションデータを設定することです。これは、WooCommerceで非常に頻繁に実行されるため、計算合計フィルター(woocommerce_before_calculate_totalsなど)をフックするよりも速いようです。

詳細はこちら: カートに追加する際に価格を変更するコマース

1
Lance Cleveland

Googleからここに来たeveeryoneの場合。 WooCommerce 3.0.1への更新が判明したため、上記は非推奨になりました。

上記の代わりにpriceの代わりにset_priceを使用する必要があります

以下に例を示します。

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']->set_price = $custom_price;
    }
}

これが将来人々に役立つことを願っています:)

1
danyo

add_filter( 'woocommerce_cart_item_price'、 'kd_custom_price_message');

関数kd_custom_price_message($ price){

    $textafter = ' USD'; 
    return $price . $textafter;

}

0
shrddha patel

これは私がやった方法です。まず、カスタム価格をcart_item_dataに追加し、カスタムデータをカートアイテムに保存できます。次に、woocommerce_before_calculate_totalsを使用して、カートをループし、以前に追加した価格を追加します。

function add_donation_to_cart() { 

    $cart_item_data = array('price' => $_REQUEST['donate_amount']);
    $woocommerce->cart->add_to_cart( 5395, 1, '', array(), $cart_item_data);
}


add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart ) {
    foreach ( $cart->cart_contents as $key => $value ) {
        $value['data']->price = $value['price'];
    }
}
0
tobros91