2026年5月21日
2026年5月21日
WooCommerceの注文管理を効率化する方法(ステータス・一括変更・メール再送・CSV出力)
WooCommerce の注文は、管理画面の「WooCommerce」→「注文」で一覧・編集できます。注文が増えてきたら、標準の一括操作とメール再送信の機能をまず使い、それでも足りない部分だけ WP-CLI やコードで補うのが手間の少ない進め方です。
この記事の手順とコードは、2026年11月時点の WooCommerce 11.2.2(WordPress 7.1・PHP 8.3)で動作を確かめたものです。画面の表記は日本語版の管理画面に合わせています。
注文ステータスの意味
WooCommerce の公式ドキュメント(Order Statuses)にある標準のステータスは次の8つです。
| ステータス | 意味 |
|---|---|
| 支払い待ち(Pending payment) | 注文は受けたが、まだ支払いが無い |
| 処理中(Processing) | 支払いが済み、在庫が減らされた。発送を待っている |
| 保留中(On hold) | 支払いの確認待ち。銀行振込(BACS)などで使われる |
| 完了(Completed) | 発送などが終わり、対応が済んだ |
| キャンセル(Cancelled) | 管理者か顧客が取り消した。在庫管理が有効なら在庫が戻る |
| 払い戻し(Refunded) | 全額を返金した |
| 失敗(Failed) | 決済が失敗した、または拒否された |
| 下書き(Draft) | ブロック版のチェックアウトで、注文確定前に作られる一時的な記録 |
「下書き」は注文確定前の一時的なもので、使われなくなったものは WooCommerce が毎日自動で削除します。手で処理する必要はありません。
ふだんの流れは「処理中」→(発送)→「完了」です。「完了」に変えると、顧客に完了の通知メールが送られます(「WooCommerce」→「設定」→「メール」で有効になっている場合)。
注文一覧で一括変更する
複数の注文のステータスを変えるだけなら、コードは要りません。
- 「WooCommerce」→「注文」を開きます。
- 上のタブ(「処理中」など)でステータスを絞り込み、変える注文にチェックを入れます。
- 一括操作のメニューから「注文状況を完了済みに変更」などを選び、「適用」を押します。
標準で用意されている一括操作は、処理中・保留中・完了済み・キャンセルへの変更と、ゴミ箱への移動です。
注文メールを再送信する
顧客から「メールが届かない」と言われたときは、注文の編集画面から送り直せます。
- 注文一覧で注文番号をクリックして編集画面を開きます。
- 右側の注文の操作ボックスで「アクションを選択...」を開き、送りたいメールを選びます(下の表)。
- 「更新」を押します。
| 選ぶ項目 | 送られるメール |
|---|---|
| 注文の詳細を顧客に送信 | 注文内容を顧客に送る |
| 新しいご注文通知の再送信 | 管理者向けの新規注文メールを送り直す |
再送信しても届かない場合は、WooCommerce ではなくサーバーのメール送信に原因があることが多いので、SMTP の設定を確認します。
WP-CLIで注文を一覧・更新する
SSH で WP-CLI が使えるなら、wp wc shop_order コマンドで注文を扱えます。コマンド名は shop_order で、wp wc order というコマンドはありません。
WooCommerce の CLI は内部で REST API を使うため、--user に権限のあるユーザー(管理者のユーザー名か ID)を付けます。付けないと Sorry, you cannot list resources. というエラーになります。
# 処理中の注文を表で表示
wp wc shop_order list --status=processing --fields=id,status,total --user=admin
# 処理中の注文の件数
wp wc shop_order list --status=processing --format=count --user=admin
# 注文 123 を完了にする
wp wc shop_order update 123 --status=completed --user=admin
処理中の注文をまとめて完了にするときは、ID の一覧を取ってから1件ずつ更新します。完了の通知メールが1件ずつ送られるので、件数を確かめてから実行してください。
for id in $(wp wc shop_order list --status=processing --format=ids --user=admin); do
wp wc shop_order update "$id" --status=completed --user=admin
done
ほかに使えるオプションは wp help wc shop_order list で確認できます。
独自のステータス「発送待ち」を追加する
「処理中」と「完了」のあいだに「発送待ち」のような段階を置きたい場合は、コードでステータスを追加します。次のコードは、ステータスの登録、ステータス一覧への追加、注文一覧の一括操作への追加を行います。
wp-content/mu-plugins/wc-awaiting-shipment.php として保存すると、プラグインとして有効化しなくても読み込まれます(mu-plugins フォルダーが無ければ作ります)。テーマの functions.php に書くと、テーマを変えたときにステータスが消えるので、この置き場所をおすすめします。
<?php
/**
* Plugin Name: 発送待ちステータス
*/
// 1. ステータスを登録する(従来の投稿テーブルで保存している場合に必要)
add_filter( 'woocommerce_register_shop_order_post_statuses', function ( $statuses ) {
$statuses['wc-awaiting-shipment'] = array(
'label' => '発送待ち',
'public' => false,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
/* translators: %s: 件数 */
'label_count' => _n_noop( '発送待ち <span class="count">(%s)</span>', '発送待ち <span class="count">(%s)</span>' ),
);
return $statuses;
} );
// 2. 注文ステータスの一覧に加える(「処理中」の次に並べる)
add_filter( 'wc_order_statuses', function ( $statuses ) {
$new = array();
foreach ( $statuses as $key => $label ) {
$new[ $key ] = $label;
if ( 'wc-processing' === $key ) {
$new['wc-awaiting-shipment'] = '発送待ち';
}
}
return $new;
} );
// 3. 注文一覧の一括操作に「発送待ちに変更」を加える(HPOS と従来の画面の両方)
foreach ( array( 'bulk_actions-woocommerce_page_wc-orders', 'bulk_actions-edit-shop_order' ) as $hook ) {
add_filter( $hook, function ( $actions ) {
$actions['mark_awaiting-shipment'] = '注文状況を発送待ちに変更';
return $actions;
} );
}
ポイントは次のとおりです。
- ステータスのキーは
wc-で始め、全体を20文字以内にします(投稿ステータスの保存欄の長さが20文字のため)。 - 一括操作のキーを
mark_+ ステータス名(wc-を除いた部分)にすると、WooCommerce の標準の処理がそのままステータスを変えてくれます。処理用のコードは要りません。 - WP-CLI からも
--status=awaiting-shipmentで一覧・更新できます。
ステータスが変わったときに処理を動かす
ステータスが変わると、woocommerce_order_status_{ステータス名} というアクションが動きます(wc- は付けません)。引数は注文 ID と注文オブジェクトです。次の例は、発送待ちになった注文に社内向けのメモを残します。倉庫システムへの連絡などは、この中に書きます。
<?php
add_action( 'woocommerce_order_status_awaiting-shipment', function ( $order_id, $order ) {
$order->add_order_note( '発送待ちになりました。出荷指示を確認してください。' );
}, 10, 2 );
外部の API に送る場合は、wp_remote_post() の戻り値を is_wp_error() で確かめ、失敗したときに注文メモへ残すようにしておくと、取りこぼしに気付けます。
注文をCSVで書き出す
管理画面から書き出す
「アナリティクス」→「注文」で期間とステータスを指定し、表の右上の「ダウンロード」を押すと CSV を取得できます。件数が多い場合は、作成後にメールで届くことがあります。
WP-CLIで書き出す
項目を自分で決めたい場合は、次の PHP ファイルを作り、wp eval-file で実行します。wc_get_orders() を使うので、注文データの保存方式(HPOS か従来の投稿テーブルか)に関係なく動きます。
<?php
// 使い方: wp eval-file export-orders.php > orders.csv
// 完了済みで、2026年1月1日以降に作成された注文を CSV で出力する
$orders = wc_get_orders(
array(
'status' => array( 'completed' ),
'date_created' => '>=2026-01-01',
'limit' => -1,
'orderby' => 'date',
'order' => 'ASC',
)
);
$out = fopen( 'php://output', 'w' );
fputcsv( $out, array( 'order_id', 'date', 'name', 'email', 'total' ) );
foreach ( $orders as $order ) {
fputcsv(
$out,
array(
$order->get_id(),
$order->get_date_created() ? $order->get_date_created()->date( 'Y-m-d H:i' ) : '',
$order->get_billing_last_name() . ' ' . $order->get_billing_first_name(),
$order->get_billing_email(),
$order->get_total(),
)
);
}
fclose( $out );
wp eval-file export-orders.php > orders.csv
期間の指定は date_created に '>=2026-01-01' や '2026-01-01...2026-03-31' の形で書きます。fputcsv() を使うと、名前にカンマが含まれていても列がずれません。Excel で開いて文字化けする場合は、データの取り込み機能で文字コードに UTF-8 を指定します。
注文が数万件ある場合は、'limit' => -1 ではメモリが足りなくなることがあります。'limit' => 500 と 'page' => 1, 2, 3… に分けて実行してください。
注意点
- 注文データの保存場所。 WooCommerce 8.2 以降の新規ストアでは、高パフォーマンス注文ストレージ(HPOS)が初期状態で有効で、注文は
wp_wc_ordersなどの専用テーブルに保存されます。どちらを使っているかは「WooCommerce」→「設定」→「高度な設定」→「機能」の「注文データストレージ」で確認できます。データベースに直接 SQL を書くと保存方式によって動かなくなるので、wc_get_orders()やWC_Orderのメソッドを使います。 - ステータスを手で戻すとき。 在庫や売上の集計に影響することがあります。たとえば「キャンセル」にすると在庫が戻ります。戻す前に注文メモで経緯を確認してください。
- 独自ステータスを削除するとき。 そのステータスの注文が残っている状態でコードを外すと、注文一覧で見えなくなります。先に別のステータスへ移してからコードを外します。