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

概要

woocommerce_valid_order_statuses_for_cancelフィルタは、WooCommerceにおいてキャンセル可能な注文ステータスを柔軟に制御するためのフックです。このフックを利用することにより、デフォルトの設定ではキャンセルの対象外となる注文ステータスを追加したり、逆にキャンセルを無効にしたりすることができます。特に以下のようなシナリオで活用されることが多いです。

  1. 特定の注文ステータスを持つ注文をキャンセル不可にする。
  2. 特定の条件に基づいて新しいキャンセル可能なステータスを追加する。
  3. 注文が特定のステータスに遷移した際にキャンセルの選択肢を調整する。
  4. テーマや他のプラグインと連携して、カスタムの注文ステータスを扱えるようにする。
  5. 定期購入やサブスクリプションにおけるキャンセルロジックをカスタマイズする。
  6. 管理画面からの注文管理をユーザーにとって直感的にするための変更を加える。

構文

add_filter( 'woocommerce_valid_order_statuses_for_cancel', 'my_custom_cancel_order_statuses', 10, 2 );

パラメータ

  • $valid_statuses (array): キャンセル可能な注文ステータスの配列。
  • $order (WC_Order): 対象となるOrderオブジェクト。

戻り値

  • array: キャンセル可能な注文ステータスの配列(カスタマイズ後のもの)。

WooCommerceとWordPressのバージョン

  • WooCommerceのバージョン: 3.0以降
  • WordPressのバージョン: 4.5以降

サンプルコード

サンプルコード 1: 特定のステータスを除外する

add_filter( 'woocommerce_valid_order_statuses_for_cancel', 'exclude_completed_orders', 10, 2 );

function exclude_completed_orders( $valid_statuses, $order ) {
    if ( $order->get_status() === 'completed' ) {
        $valid_statuses = array_diff( $valid_statuses, array( 'completed' ) );
    }
    return $valid_statuses;
}

このコードは、完了した注文(completed)のキャンセルを無効にします。

サンプルコード 2: 新しいキャンセル可能ステータスを追加

add_filter( 'woocommerce_valid_order_statuses_for_cancel', 'add_custom_order_status', 10, 2 );

function add_custom_order_status( $valid_statuses, $order ) {
    if ( $order->get_status() === 'pending' ) {
        $valid_statuses[] = 'on-hold'; // 保留中のステータスを追加
    }
    return $valid_statuses;
}

このコードは、保留中(on-hold)のステータスの注文をキャンセル可能にします。

サンプルコード 3: 注文が特定のステータスにある場合に変更

add_filter( 'woocommerce_valid_order_statuses_for_cancel', 'modify_order_status_based_on_conditions', 10, 2 );

function modify_order_status_based_on_conditions( $valid_statuses, $order ) {
    if ( $order->get_status() === 'processing' && $order->get_total() > 100 ) {
        $valid_statuses = array_diff( $valid_statuses, array( 'processing' ) ); // $100以上の処理中の注文をキャンセル不可
    }
    return $valid_statuses;
}

このコードは、合計金額が100ドル以上の処理中の注文をキャンセル不可とします。

サンプルコード 4: 特定のユーザーの注文に対するキャンセルオプションの調整

add_filter( 'woocommerce_valid_order_statuses_for_cancel', 'customize_cancel_option_for_user', 10, 2 );

function customize_cancel_option_for_user( $valid_statuses, $order ) {
    if ( $order->get_user_id() == 1 ) { // ユーザーIDが1の場合
        $valid_statuses[] = 'refunded'; // 返金済みのステータスを追加
    }
    return $valid_statuses;
}

このコードは、特定のユーザーに対して返金済み(refunded)の注文がキャンセル可能とします。

サンプルコード 5: 常にキャンセル不可のステータスを設定

add_filter( 'woocommerce_valid_order_statuses_for_cancel', 'always_block_cancellation', 10, 2 );

function always_block_cancellation( $valid_statuses, $order ) {
    // すべてのステータスをキャンセル不可に設定
    return array();
}

このコードは、すべての注文ステータスに対してキャンセルを不可とします。

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

アクション名 使用可能性
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

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


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