プラグインWooCommerceのwoocommerce_pay_order_product_in_stockアクションの使用方法・解説

概要

woocommerce_pay_order_product_in_stock アクションは、WooCommerceの注文に関連する商品の在庫状況を確認するために使用されるフックです。このアクションは、商品の在庫が十分な場合にのみ、ユーザーに対して特定の処理を実行する際によく使われます。以下はこのアクションがよく使われる機能の例です:

  1. 在庫がある商品の支払い処理を開始する際のカスタマイズ
  2. 在庫切れの場合のエラーメッセージの表示
  3. 在庫が少ない商品の購入制限
  4. 注文完了後の在庫更新
  5. 支払い時のカスタム通知の送信
  6. 商品の入荷後の再注文受付のトリガー

構文

do_action('woocommerce_pay_order_product_in_stock', $order);

パラメータ

  • $order: 注文オブジェクト。関連する注文の詳細情報を持っています。

戻り値

このアクションは、特に戻り値を持たず、他の関数やフックを実行するためのトリガーとして機能します。

使用可能なプラグイン WooCommerce のバージョン

  • WooCommerce 3.0 以上

ワードプレスのバージョン

  • WordPress 4.7 以上

この関数のアクションでの使用可能性

アクション 使用例
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

サンプルコード

サンプルコード1: 在庫状況のログ出力

このサンプルコードは、支払い対象の商品の在庫状況をログに出力します。在庫がある場合は”商品が在庫あり”と記録され、在庫がない場合は”商品が在庫切れ”と記録されます。

add_action('woocommerce_pay_order_product_in_stock', 'check_product_stock_status', 10, 1);
function check_product_stock_status($order) {
    $items = $order->get_items();
    foreach ($items as $item) {
        $product = $item->get_product();
        if ($product->is_in_stock()) {
            error_log('商品が在庫あり: ' . $product->get_name());
        } else {
            error_log('商品が在庫切れ: ' . $product->get_name());
        }
    }
}

サンプルコード2: 在庫切れ時のカスタムメッセージ表示

このコードは、在庫がない場合にカスタムメッセージを表示する例です。特定の条件に基づいてメッセージを調整することも可能です。

add_action('woocommerce_pay_order_product_in_stock', 'custom_out_of_stock_message', 10, 1);
function custom_out_of_stock_message($order) {
    $items = $order->get_items();
    foreach ($items as $item) {
        $product = $item->get_product();
        if (!$product->is_in_stock()) {
            wc_add_notice(__('申し訳ありませんが、商品が在庫切れです。'), 'error');
        }
    }
}

サンプルコード3: 注文完了後の在庫更新

このサンプルコードは、支払い処理が完了した後に商品の在庫を更新する例です。商品が在庫切れの場合、在庫を減らさずエラーメッセージを表示します。

add_action('woocommerce_pay_order_product_in_stock', 'update_product_stock_after_payment', 10, 1);
function update_product_stock_after_payment($order) {
    $items = $order->get_items();
    foreach ($items as $item) {
        $product = $item->get_product();
        if ($product->is_in_stock()) {
            $stock_quantity = $product->get_stock_quantity();
            $product->set_stock_quantity($stock_quantity - $item->get_quantity());
            $product->save();
        } else {
            wc_add_notice(__('在庫が不足しております。注文はキャンセルされました。'), 'error');
        }
    }
}

サンプルコード4: 定期的な在庫チェック

このコードは、商品の在庫を定期的にチェックし、在庫が復活した場合にクライアントに通知します。

add_action('woocommerce_pay_order_product_in_stock', 'notify_if_stock_replenished', 10, 1);
function notify_if_stock_replenished($order) {
    $items = $order->get_items();
    foreach ($items as $item) {
        $product = $item->get_product();
        if ($product->is_in_stock()) {
            // 在庫が復活した場合の通知処理
            wp_mail('customer@example.com', '在庫復活のお知らせ', $product->get_name() . 'が再入荷されました。');
        }
    }
}

サンプルコード5: 特定商品の在庫確認と割引適用

このサンプルコードは、特定の商品の在庫を確認し、在庫がある場合は顧客に自動的に割引を適用します。

add_action('woocommerce_pay_order_product_in_stock', 'apply_discount_on_product_stock_check', 10, 1);
function apply_discount_on_product_stock_check($order) {
    $items = $order->get_items();
    foreach ($items as $item) {
        $product = $item->get_product();
        if ($product->is_in_stock() && $product->get_id() === 123) { // 特定商品IDを確認
            // 割引処理
            $discount = 10; // 10%の割引
            $order->set_discount_total($order->get_discount_total() + $discount);
            $order->calculate_totals();
        }
    }
}

この関数について質問する


上の計算式の答えを入力してください