概要
woocommerce_valid_order_statuses_for_cancel
フィルタは、WooCommerceにおいてキャンセル可能な注文ステータスを柔軟に制御するためのフックです。このフックを利用することにより、デフォルトの設定ではキャンセルの対象外となる注文ステータスを追加したり、逆にキャンセルを無効にしたりすることができます。特に以下のようなシナリオで活用されることが多いです。
- 特定の注文ステータスを持つ注文をキャンセル不可にする。
- 特定の条件に基づいて新しいキャンセル可能なステータスを追加する。
- 注文が特定のステータスに遷移した際にキャンセルの選択肢を調整する。
- テーマや他のプラグインと連携して、カスタムの注文ステータスを扱えるようにする。
- 定期購入やサブスクリプションにおけるキャンセルロジックをカスタマイズする。
- 管理画面からの注文管理をユーザーにとって直感的にするための変更を加える。
構文
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 |