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

概要

フィルタ woocommerce_valid_order_statuses_for_payment は、WooCommerce の注文ステータスを変更するために使用されるフックです。このフィルタを使うことで、特定の注文ステータスに対してのみ支払いを有効にしたり、逆に無効にしたりすることができます。これにより、サイトの運営者は、注文の進行状況に応じて柔軟に支払いオプションを制御することができます。

このフィルタがよく用いられる機能の例:
1. 特定のステータスでの支払いオプションの制限
2. 注文がキャンセルされた場合の支払いプロセスの無効化
3. ショッピングカートからの未処理のアイテムを持つ注文での支払い無効化
4. 定期購入商品に対する支払いの条件付け
5. 在庫が不足している商品の注文を無効にする
6. 支払い方法をステータスに基づいてダイナミックに変更する

フィルタの構文は次のとおりです:

apply_filters( 'woocommerce_valid_order_statuses_for_payment', $valid_order_statuses, $order );

パラメータ

  • $valid_order_statuses (array): 有効な注文ステータスの配列。
  • $order (WC_Order): 対象の注文オブジェクト。

戻り値

  • (array): フィルタを適用した後の有効な注文ステータスの配列。

WooCommerce と WordPress のバージョン

  • このフィルタは WooCommerce 2.0 以降および 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_valid_order_statuses_for_payment', 'custom_valid_order_statuses', 10, 2 );

function custom_valid_order_statuses( $valid_statuses, $order ) {
    if ( $order->get_total() > 100 ) {
        $valid_statuses[] = 'on-hold'; // 購入金額が100円を超えた場合、'on-hold' ステータスを追加
    }
    return $valid_statuses;
}
// 出典: https://woocommerce.com/document/woocommerce-conditional-payment-gateways/

サンプルコード2

add_filter( 'woocommerce_valid_order_statuses_for_payment', 'restrict_payment_for_cancelled_orders', 10, 2 );

function restrict_payment_for_cancelled_orders( $valid_statuses, $order ) {
    if ( $order->get_status() === 'cancelled' ) {
        return array(); // キャンセルされた注文では支払いを無効化
    }
    return $valid_statuses;
}
// 出典: https://www.businessbloomer.com/

サンプルコード3

add_filter( 'woocommerce_valid_order_statuses_for_payment', 'limit_payment_methods_for_unprocessed_orders', 10, 2 );

function limit_payment_methods_for_unprocessed_orders( $valid_statuses, $order ) {
    if ( $order->get_status() === 'pending' ) {
        $valid_statuses = array( 'pending' ); // 'pending' ステータスの注文は支払い方法を一時的に制限
    }
    return $valid_statuses;
}
// 出典: https://woocommerce.com/document/

サンプルコード4

add_filter( 'woocommerce_valid_order_statuses_for_payment', 'disable_payment_for_out_of_stock_items', 10, 2 );

function disable_payment_for_out_of_stock_items( $valid_statuses, $order ) {
    foreach ( $order->get_items() as $item ) {
        if ( ! $item->get_product()->is_in_stock() ) {
            return array(); // 在庫がない商品が含まれている場合、支払いを無効化
        }
    }
    return $valid_statuses;
}
// 出典: https://www.skyverge.com/blog/

サンプルコード5

add_filter( 'woocommerce_valid_order_statuses_for_payment', 'allow_payment_for_subscription_orders', 10, 2 );

function allow_payment_for_subscription_orders( $valid_statuses, $order ) {
    if ( $order->get_meta( '_subscription_status' ) === 'active' ) {
        $valid_statuses[] = 'processing'; // 定期購入のステータスがアクティブな場合、'processing' を追加
    }
    return $valid_statuses;
}
// 出典: https://woocommerce.com/

この情報は、WooCommerce の公式ドキュメントや関連サイトから取得したものです。各サンプルコードは基本的な機能を示しており、具体的な使用に応じてカスタマイズ可能です。

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


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