現場で使える WooCommerce カスタマイズ:注文ステータスが 「completed(完了)」へ変更された時に何かの処理をする方法

WooCommerce で注文ステータスを完了に変更された時に何かの処理をするには「woocommerce_order_status_completed」フィルターを使うと便利です。

自社 EC サイトでは、開発・運営チームから有償サポートを受けられるチケットを販売していまして「特定のユーザーが購入したサポートチケットの枚数分をプラスする」処理などに使っています。

add_action( 'woocommerce_order_status_completed',  'add_support_ticket', 10, 1 );

function add_support_ticket( $order_id ){
 // 注文情報を取得
 $order = wc_get_order( $order_id );
 $user_id = $order->get_user_id();  // 購入したユーザーのIDを取得
 $support_ticket_product_id = '123'; // 対象となる商品ID。オプションに保存しておくなどしておくと、いちいち指定しなくていいので便利
       
 // 注文に含まれる商品をチェック
 foreach ( $order->get_items() as $item_id => $item ) {
  $product_id = $item->get_product_id();  // 商品IDを取得
  $quantity = $item->get_quantity();      // 商品の購入数量を取得

  // 特定の商品IDが見つかれば処理 
  if ( $product_id == $support_ticket_product_id ) {
   // チケット数を追加する
   $current_support_ticket_num = get_user_meta( $user_id, 'custom_support_ticket', true );
   $new_support_ticket_num = absint( $current_support_ticket_num ) + absint( $quantity );
   update_user_meta( $user_id, 'custom_support_ticket', $new_support_ticket_num );
  }
 }
}