$replace_order = new WC_Cart();
$replace_order->empty_cart( true );
$replace_order->add_to_cart( "256", "1");
上記のコードは製品を追加します256
カートへ1
時間。しかし、私が抱えている問題は、製品の価格を完全にオーバーライドできるようにすることです...私が知る限り、できることはカートにクーポンを適用することだけです。
価格を完全にカスタムのものに完全にオーバーライドする方法はありますか?
カート内の製品の価格をオーバーライドするコードは次のとおりです
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);
}
}
それが役に立つことを願っています...
上記のコードで、製品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);
この商品のみが価格が上書きされて追加され、カートに追加された他の商品は価格が上書きされても無視されます。
これが役に立てば幸いです。
上記のすべてのコードサンプルを試してみましたが、最新の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);
}
}
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);
}
}
}
どうもありがとう
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);
}
}
動的にする(カート内の各アイテムの価格を個別にオーバーライドする)には、woocommerce_add_to_cart
フック。
これらのセッション値を使用することにより、正しいカート合計を計算し、変更された価格を注文アイテムにも表示できます
WooCommerce 2.5では、これは2つの部分からなるプロセスであることがわかりました。最初のステップは、woocommerce_add_cart_itemフィルターを介してカートに追加されたときに、価格設定の実行時表示を変更することです。 2番目の部分は、woocommerce_get_cart_item_from_sessionフィルターを介してチェックアウト中に読み取られる永続的なセッションデータを設定することです。これは、WooCommerceで非常に頻繁に実行されるため、計算合計フィルター(woocommerce_before_calculate_totalsなど)をフックするよりも速いようです。
詳細はこちら: カートに追加する際に価格を変更するコマース
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;
}
}
これが将来人々に役立つことを願っています:)
add_filter( 'woocommerce_cart_item_price'、 'kd_custom_price_message');
関数kd_custom_price_message($ price){
$textafter = ' USD';
return $price . $textafter;
}
これは私がやった方法です。まず、カスタム価格を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'];
}
}