2026年5月21日
2026年5月21日
WooCommerceの注文管理を効率化する方法・ステータス変更・一括処理・自動化
はじめに
「注文が溜まってきて手動での処理が追いつかない」「特定ステータスの注文を一括で処理したい」——WooCommerceの注文管理機能を使いこなすと、受注から発送完了までのワークフローを大幅に効率化できます。
症状・原因
WooCommerceの注文ステータスは「保留中・処理中・完了・キャンセル」など9種類のデフォルト状態があります。業務フローに合わせたカスタムステータスの追加や、ステータス変更に連動した自動処理が設定されていないと、手動対応が増えてしまいます。
解決手順
ステップ1:注文ステータスを確認・変更する
# 注文一覧をWP-CLIで確認
wp wc order list \
--status=processing \
--fields=id,status,total,billing_email \
--format=table \
--user=1
# 特定注文のステータスを変更
wp wc order update 123 \
--status=completed \
--user=1
# 複数注文を一括でステータス変更
for id in 101 102 103 104 105; do
wp wc order update $id --status=completed --user=1
done
ステップ2:カスタム注文ステータスを追加する
// カスタム注文ステータスを登録
add_action( 'init', function() {
register_post_status( 'wc-awaiting-shipment', [
'label' => '発送待ち',
'public' => true,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( '発送待ち (%s)', '発送待ち (%s)' ),
] );
} );
// WooCommerceの注文ステータス一覧に追加
add_filter( 'wc_order_statuses', function( $statuses ) {
$statuses['wc-awaiting-shipment'] = '発送待ち';
return $statuses;
} );
// ステータス変更時の自動処理
add_action( 'woocommerce_order_status_awaiting-shipment', function( $order_id ) {
$order = wc_get_order( $order_id );
// 倉庫システムへの通知など
wp_remote_post( 'https://warehouse.example.com/api/orders', [
'body' => json_encode( [
'order_id' => $order_id,
'items' => $order->get_items(),
] ),
'headers' => [ 'Content-Type' => 'application/json' ],
] );
} );
ステップ3:注文メールを再送信する
// 注文確認メールを再送信
function resend_order_email( $order_id, $email_type = 'customer_processing_order' ) {
$order = wc_get_order( $order_id );
$mailer = WC()->mailer();
$emails = $mailer->get_emails();
$email_classes = [
'customer_processing_order' => 'WC_Email_Customer_Processing_Order',
'customer_completed_order' => 'WC_Email_Customer_Completed_Order',
'new_order' => 'WC_Email_New_Order',
];
if ( isset( $email_classes[ $email_type ] )
&& isset( $emails[ $email_classes[ $email_type ] ] ) ) {
$emails[ $email_classes[ $email_type ] ]->trigger( $order_id );
return true;
}
return false;
}
// 管理画面の注文アクションに「メール再送信」を追加
add_filter( 'woocommerce_order_actions', function( $actions ) {
$actions['send_order_confirmation'] = '注文確認メールを再送信';
return $actions;
} );
add_action( 'woocommerce_order_action_send_order_confirmation', function( $order ) {
resend_order_email( $order->get_id(), 'customer_processing_order' );
} );
ステップ4:注文データをエクスポートする
# WP-CLIで注文データをCSVエクスポート
wp eval '
$orders = wc_get_orders([
"status" => "completed",
"date_after" => "2025-01-01",
"limit" => -1,
]);
echo "ID,顧客名,合計,日付\n";
foreach ($orders as $order) {
echo implode(",", [
$order->get_id(),
$order->get_billing_last_name() . $order->get_billing_first_name(),
$order->get_total(),
$order->get_date_created()->date("Y-m-d"),
]) . "\n";
}
' > orders_completed.csv
wc -l orders_completed.csv
ステップ5:古い注文を自動アーカイブする
// 90日以上前の完了注文を自動アーカイブ(カスタムステータスへ移動)
add_action( 'woocommerce_scheduled_sales', function() {
$old_orders = wc_get_orders( [
'status' => 'completed',
'date_before' => date( 'Y-m-d', strtotime( '-90 days' ) ),
'limit' => 100,
] );
foreach ( $old_orders as $order ) {
$order->update_status( 'wc-archived', '自動アーカイブ' );
}
} );
// WP-Cronでスケジュール
add_action( 'wp', function() {
if ( ! wp_next_scheduled( 'archive_old_orders' ) ) {
wp_schedule_event( time(), 'daily', 'archive_old_orders' );
}
} );
add_action( 'archive_old_orders', function() {
// 上記のアーカイブ処理を実行
} );
注意事項
- 注文ステータスを手動変更すると、関連する在庫調整や会計データに影響する場合があります。変更前に影響範囲を確認してください。
- カスタムステータスを追加する場合、スラッグは
wc-プレフィックスをつける必要があります(例:wc-awaiting-shipment)。 - WooCommerceの注文データはHPOS(High-Performance Order Storage)移行後は
wp_wc_ordersテーブルに保存されます。直接DBクエリを書く場合はHPOS対応を確認してください。
まとめ
WooCommerceの注文管理効率化は「カスタムステータス追加→自動処理設定→メール再送信→CSVエクスポート→自動アーカイブ」の組み合わせで実現できます。WP-CLIを活用した一括処理も積極的に活用しましょう。関連記事:WooCommerceのレポート・売上分析を活用する方法、WooCommerce決済エラーを解決する方法。