WooCommerce が現在標準でCheckout Blockを利用してカートや支払いページが動くようになったのですが、決済後の表示などに関して、クラシックと違う場合があるので、Store APIをいじるよりも表示のフック等で区別した方がシンプルで分かりやすいので、注文単位でCheckout Block経由の注文かどうかを判断した時の方がいい場合の対応ほうを共有します。
ちなみに注文が出来上がった後となりますので、process_payment以降的に考えた方がいいです。
$order->get_created_via() を使う。
注文オブジェクトで使える関数 get_created_vi で判別が出来ます。
ブロックで作られた注文もしくは REST API で作成された場合は'store-api'となります。
クラッシックチェックアウトで作られた注文は'checkout'となります。
// $order は \WC_Order オブジェクト
if ( $order->get_created_via() === 'store-api' ) {
// この注文はブロック版のチェックアウトで作られた
}
DB的な情報としては、データベース上では HPOS を利用して、post の post_type
が shop_order_placehold
の場合は以下で設定されています。
テーブル: wp_wc_order_operational_data
フィールド: created_via
post の post_type
が shop_order
の場合で注文データに post データを利用している場合は、投稿メタに以下のように登録されます。
テーブル: wp_postmeta
キー: _created_via