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

上記のコードは、商品256をカートに追加します1。しかし、私が抱えている問題は、製品価格を完全に上書きできるようにしたいということです...私が知る限り、私ができる唯一のことはカートにクーポンを適用することです.

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

4

10 に答える 10

57

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

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

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

于 2012-09-08T11:31:23.017 に答える
45

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

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

オーバーライドされた価格で追加されるのはこの製品のみです。カートに追加された他の製品は、オーバーライドされた価格では無視されます。

これが役立つことを願っています。

于 2014-01-20T06:50:18.880 に答える
3

Google からここにたどり着いたすべての人のために。WooCommerce 3.0.1 への更新が判明したため、上記は非推奨になりました。

set_price上記の代わりに、代わりに使用する必要があります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;
    }
}

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

于 2017-04-07T09:24:57.317 に答える
1

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

詳細はこちら: カートに追加する際の woocommerce 価格の変更

于 2016-02-25T16:13:46.900 に答える