概要
woocommerce_after_calculate_totals
アクションフックは、WooCommerce でカートの合計金額が計算された後に実行されるフックです。このフックは主に以下のような機能を実装する際によく使用されます。
- カート内の商品の価格を動的に変更する
- 割引や追加料金を適用する
- 特定の条件に基づいて商品を非表示にする
- 顧客のロケーションに応じた料金調整
- カスタムメッセージをカートに表示する
- フラグやメタデータを基に特定の操作を実行する
構文
add_action('woocommerce_after_calculate_totals', 'your_function_name');
パラメータ
WC_Cart
$cart: WooCommerce のカートオブジェクト。
戻り値
このアクションは戻り値を持ちません。フックされる関数内でのロジックが結果に影響を与えます。
使用可能なプラグインバージョン
- WooCommerce: 3.0.0以上
- WordPress: 4.0以上
サンプルコード
サンプル 1: 動的にカートの商品価格を変更
このサンプルコードは、カート内の特定の商品価格を動的に変更します。
add_action('woocommerce_after_calculate_totals', 'change_cart_product_price');
function change_cart_product_price($cart) {
foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
if ($cart_item['product_id'] === 123) { // 商品IDが123のとき
$cart_item['data']->set_price(10.00); // 価格を10ドルに設定
}
}
}
引用元: https://www.wpbeginner.com/
サンプル 2: 特別な割引を適用
このコードは、カートの合計金額に特定の割引を追加します。
add_action('woocommerce_after_calculate_totals', 'apply_cart_discount');
function apply_cart_discount($cart) {
$discount = 5; // 割引額
$cart->add_fee('Special Discount', -$discount); // カートに割引を追加
}
引用元: https://www.cloudways.com/
サンプル 3: カスタムメッセージの追加
このサンプルは、カートにカスタムメッセージを表示します。
add_action('woocommerce_after_calculate_totals', 'add_custom_message');
function add_custom_message($cart) {
if ($cart->get_cart_contents_count() > 0) {
wc_print_notice('お買い上げありがとうございます!', 'notice');
}
}
引用元: https://woocommerce.com/
サンプル 4: 商品を非表示にする
特定の条件に基づいてカート内の商品を非表示にするサンプル。
add_action('woocommerce_after_calculate_totals', 'hide_product_from_cart');
function hide_product_from_cart($cart) {
foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
if ($cart_item['product_id'] === 456) { // 商品IDが456のとき
$cart->remove_cart_item($cart_item_key); // カートから削除
}
}
}
引用元: https://www.tutsplus.com/
サンプル 5: 地域による料金調整
こちらのコードは、顧客の地域によってカート料金を調整します。
add_action('woocommerce_after_calculate_totals', 'adjust_price_by_region');
function adjust_price_by_region($cart) {
$customer_country = WC()->customer->get_billing_country();
if ($customer_country === 'JP') { // 日本の場合
foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
$cart_item['data']->set_price($cart_item['data']->get_price() * 1.10); // 10%アップ
}
}
}
引用元: https://www.codeinwp.com/
この関数のアクションでの使用可能性
アクション名 | 使用例 |
---|---|
mu_plugin_loaded | |
registered_post_type | |
plugins_loaded | |
wp_roles_init | |
setup_theme | |
after_setup_theme | |
set_current_user | |
init | |
register_sidebar | |
wp_loaded | |
send_headers | |
parse_query | |
pre_get_posts | |
wp | |
template_redirect | |
get_header | |
wp_head |