WooCommerce の注文データとなる wc_get_order($order_id)の関数によって取得できる商品データがちょっとややこしい部分があるので内容を説明します。
## 商品データの取得方法
$order = wc_get_order( $order_id );// $order_id is Post object or post ID of the order.
$products = $order->get_items( 'line_item' );// default is line_item
まずは、注文データを注文IDか注文オブジェクトで呼び出します。
そして、WC_Order のget_itemsを利用して注文に含まれる商品データ一覧を取得します。パラメーターに line_item を入れると商品データとなりますが、ブランクでもデフォルトが line_item なので商品データが出されます。ちなみに商品データ以外に以下の変数で注文内のそれぞれが抜き出せます。
- line_item 商品データ
- tax 税データ
- shipping 送料データ
- fee 手数料
- coupon クーポン
woocommerce_order_type_to_group のフィルターフックで上記の項目が増やすことができますので、拡張プラグイン等で増やされている場合もあるので、フックを使っていないかどうかのチェックをする必要があります。
##取得できる商品データの詳細
foreach($products as $product){
echo $product->get_product_id();
}
商品データの詳細は上記のように CRUD を利用して取得するのが良いです。
取得できるデータは以下です。
- id 注文内での id
- name 商品名
- prodcut_id 商品ID
- variation_id バリエーションID
- quantity 数
- subtotal 小計
- subtotal_tax 小計の税金(四捨五入などの処理済みの数値)
- total 合計
- total_tax 合計の税金(四捨五入などの処理済みの数値)
- taxes 税金の内訳で四捨五入などの処理がされる前の数値**(配列)**
取得できる情報は上記だけですので、カテゴリーやタグなどを取得したい場合はproduct_id から商品データを取得し直す必要があります。
ちなみに商品単価は取得できないので、合計を数量で割るなどの処理が必要になります。
小計(subtotal)と合計(total)は基本的には同じ数値になることが多いですが、様々な処理をする際に異なることがあるので、凝った処理をしている場合などは注意が必要です。
消費税などの処理が、内税などにすると商品単価が小数点の長い数値になったりする(合計が数量で割り切れない)場合もありますので、注意が必要です。なので、個人的には外税設定にすることをお勧めします。
ちなみに対象の注文 ID が無かった場合
bool で false が返されます。