次の機能を使用して、カートの製品価格を変更しようとしています。
add_action( 'woocommerce_before_shipping_calculator', 'add_custom_price'
);
function add_custom_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
$value['data']->price = 400;
}
}
WooCommerceバージョン2.6.xでは正しく動作していましたが、バージョン3.0+では動作しなくなりました
WooCommerceバージョン3.0以降で動作させるにはどうすればよいですか?
ありがとう。
更新(2018年9月)
WooCommerceバージョン3.0 +が必要な場合:
woocommerce_before_calculate_totals
_フックを使用します。get_cart()
メソッドを使用するにはset_price()
メソッドを使用するにはコードは次のとおりです。
_add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 20, 1);
function add_custom_price( $cart ) {
// This is necessary for WC 3.0+
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Avoiding hook repetition (when using price calculations for example)
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// Loop through cart items
foreach ( $cart->get_cart() as $item ) {
$item['data']->set_price( 40 );
}
}
_
コードは、アクティブな子テーマ(またはテーマ)のfunction.phpファイル、または任意のプラグインファイルに含まれます。
このコードはテスト済みで動作します。
注:次のことができますフックの優先度を上げる from _
20
_ to _1000
_(または偶数_2000
_)いくつかの特定のプラグインまたは他のカスタマイズを使用する場合。
関連:
WooCommerceバージョン3.2.6では、優先度を1000に上げると@LoicTheAztecの答えが機能します。
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 1000, 1);
10
、99
および999
の優先度の値を試しましたが、カートの価格と合計は変わりませんでした(get_price()
で確認できたにもかかわらずset_price()
は実際にアイテムの価格を設定していました。
カートに料金を追加するカスタムフックがあり、製品属性を追加するサードパーティのプラグインを使用しています。これらのWooCommerceの「アドオン」により、カスタムアクションの遅延が必要な遅延が発生する可能性があります。