プラグインWooCommerceのwoocommerce_payment_complete_order_statusフィルタの使用方法・解説

概要

woocommerce_payment_complete_order_status フィルタは、WooCommerce での注文の支払い完了のステータスを変更するためのフックです。このフィルタを使用することで、特定の条件に基づいて支払いが完了した後の注文のステータスをカスタマイズできます。この機能は通常、次のような場面で使用されます。

  1. 特定の支払いゲートウェイに基づいて異なるステータスを設定する
  2. クーポンや割引が適用された場合の注文ステータスを変更する
  3. サブスクリプションが関連する場合に新しいステータスを設定する
  4. 顧客の地域や国に応じたカスタムステータスを適用する
  5. 商品の在庫状況に基づいてステータスを変更する
  6. チェックアウト時のユーザーの選択肢によって異なるステータスを設定する

構文

add_filter('woocommerce_payment_complete_order_status', 'your_function_name', 10, 2);

パラメータ

  • $status (string): 現在の注文の支払い完了ステータス。
  • $order_id (int): 完了した支払いの注文 ID。

戻り値

  • 変更したいステータスを返す(string)。

WooCommerce バージョン

  • このフィルタは WooCommerce バージョン 2.0 以降で使用可能です。

WordPress バージョン

  • WordPress バージョン 4.0 以降で使用可能です。

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

アクション 使用可能性
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_filter('woocommerce_payment_complete_order_status', 'change_order_status_on_gateway', 10, 2);
function change_order_status_on_gateway($status, $order_id) {
    $order = wc_get_order($order_id);
    if ($order->get_payment_method() === 'stripe') {
        return 'completed';
    }
    return $status;
}

このコードは、支払い方法が「Stripe」である場合に、注文の支払い完了ステータスを「completed」に変更します。引用元: https://woocommerce.com/

サンプルコード 2

add_filter('woocommerce_payment_complete_order_status', 'custom_order_status_based_on_coupon', 10, 2);
function custom_order_status_based_on_coupon($status, $order_id) {
    $order = wc_get_order($order_id);
    if ($order->get_used_coupons()) {
        return 'on-hold';
    }
    return $status;
}

このコードは、もしクーポンが使用されている場合、注文の支払い完了ステータスを「on-hold」に変更します。引用元: https://developer.wordpress.org/

サンプルコード 3

add_filter('woocommerce_payment_complete_order_status', 'set_subscription_order_status', 10, 2);
function set_subscription_order_status($status, $order_id) {
    $order = wc_get_order($order_id);
    if ($order->is_subscription()) {
        return 'pending';
    }
    return $status;
}

このコードは、もし注文がサブスクリプション関連の場合、支払い完了ステータスを「pending」に変更します。引用元: https://woocommerce.com/

サンプルコード 4

add_filter('woocommerce_payment_complete_order_status', 'change_status_based_on_region', 10, 2);
function change_status_based_on_region($status, $order_id) {
    $order = wc_get_order($order_id);
    if ($order->get_shipping_country() === 'JP') {
        return 'completed';
    }
    return $status;
}

このコードは、日本からの注文に対して支払い完了ステータスを「completed」に変更します。引用元: https://docs.woocommerce.com/

サンプルコード 5

add_filter('woocommerce_payment_complete_order_status', 'stock_based_order_status', 10, 2);
function stock_based_order_status($status, $order_id) {
    $order = wc_get_order($order_id);
    foreach ($order->get_items() as $item) {
        $product = $item->get_product();
        if (!$product->is_in_stock()) {
            return 'cancelled';
        }
    }
    return $status;
}

このコードは、注文内のいずれかのアイテムが在庫切れの場合、支払い完了ステータスを「cancelled」に変更します。引用元: https://woocommerce.wordpress.com/

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


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