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

概要

woocommerce_valid_order_statuses_for_order_again フィルタは、WooCommerceの注文を再度注文する際に有効な注文ステータスをカスタマイズするためのものです。このフィルタを使うことで、特定の注文ステータス(例:完了した、処理中など)を再注文可能なステータスリストに追加または除外することができます。これにより、店舗オーナーは、どの状態の注文が再購入可能かを柔軟に制御できます。

このフィルタは、以下のような機能を実装する際によく使われます:
1. 管理者が特定の状態にある注文の再注文を許可する場合。
2. 顧客が完了した注文を再度購入するためのエクスペリエンスを改善するため。
3. 特定のカスタムステータスを再注文の対象にする必要がある場合。
4. キャンセルされた注文を再注文する際の条件を調整するため。
5. 注文の返金処理の後に再注文を許可する際に使用する。
6. サブスクリプションや定期購入のモデルにおいて、特定のステータスを管理するため。

構文

add_filter( 'woocommerce_valid_order_statuses_for_order_again', 'custom_function_name', 10, 2 );

パラメータ

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

戻り値

  • 有効な注文ステータスの新しい配列。

使用可能なバージョン

  • WooCommerce: 3.0 以上
  • WordPress: 4.0 以上

サンプルコード

サンプルコード1: 特定のステータスを再注文可能にする

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

function add_custom_order_status( $valid_statuses, $order ) {
    if ( $order->get_status() === 'completed' ) {
        $valid_statuses[] = 'processing';
    }
    return $valid_statuses;
}

このコードは、完了した注文に対して、処理中の注文ステータスを再注文可能なステータスに追加します。

サンプルコード2: 特定の条件でキャンセルされた注文を再注文可能にする

add_filter( 'woocommerce_valid_order_statuses_for_order_again', 'allow_canceled_order_again', 10, 2 );

function allow_canceled_order_again( $valid_statuses, $order ) {
    if ( $order->get_status() === 'cancelled' && $order->get_total() > 0 ) {
        $valid_statuses[] = 'pending';
    }
    return $valid_statuses;
}

このコードは、合計金額が0より大きいキャンセルされた注文に対して、保留中の注文ステータスを再注文可能にします。

サンプルコード3: すべての注文に「再注文」オプションを追加

add_filter( 'woocommerce_valid_order_statuses_for_order_again', 'enable_all_order_reorder', 10, 2 );

function enable_all_order_reorder( $valid_statuses, $order ) {
    return array_merge( $valid_statuses, array( 'completed', 'processing', 'on-hold' ) );
}

このコードは、完了、処理中、保留中のすべての注文ステータスに対して再注文オプションを有効にします。

サンプルコード4: 特定のカスタムステータスを再注文可能にする

add_filter( 'woocommerce_valid_order_statuses_for_order_again', 'add_custom_status_to_reorder', 10, 2 );

function add_custom_status_to_reorder( $valid_statuses, $order ) {
    if ( $order->get_status() === 'my_custom_status' ) {
        $valid_statuses[] = 'completed';
    }
    return $valid_statuses;
}

このコードは、my_custom_status というカスタムステータスの注文に対して、完了した注文ステータスを再注文可能にします。

サンプルコード5: 再注文時に条件を検査

add_filter( 'woocommerce_valid_order_statuses_for_order_again', 'conditional_reorder_status', 10, 2 );

function conditional_reorder_status( $valid_statuses, $order ) {
    $has_discount = $order->get_meta('has_discount');

    if ( $has_discount ) {
        $valid_statuses[] = 'completed';
    }
    return $valid_statuses;
}

このコードは、注文に「割引」が適用されている場合、完了した注文ステータスを再注文可能にします。

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

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

このフィルタは基本的にWooCommerceの注文管理に関連しているため、一般的にこれらのアクションでは直接的に使用されませんが、必要に応じてWooCommerceのカスタマイズや拡張が実施された結果、特定のカスタムフック内で使用される場合があります。

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


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