' Event Subscriber 'を使用すると、チェックアウトの完了後に、注文から$order
および$items
を取得できます。
$items
から製品IDを取得し、製品のカスタムフィールド値を変更するにはどうすればよいですか?
シナリオ:製品の最初のチェックアウトを完了した後、製品のステータスを変更したい。
製品のステータスまたは製品バリエーションを本当に変更しますか?
_$items
_はOrderItemの配列です。アイテムをループする場合、$purchasedEntity = $item->getPurchasedEntity();
を使用して、単一アイテムの参照された購入済みエンティティを取得できます。最初のアイテムだけが必要な場合は、$purchasedEntity = $items[0]->getPurchasedEntity();
のようにアクセスできます。 PurchasedEntityがProductVariationの場合、$product = $purchasedEntity->getProduct();
を使用して製品を取得できます
製品のステータスを変更したい場合:
_$product->setUnpublished();
_
またはバリエーションの場合:
_$variation->setActive(false);
_
製品バリエーションにカスタムフィールドを設定する場合:
_$variation->set('your_custom_field_name', $value);
_
docs これは、デフォルトのcommerce2製品アーキテクチャーを使用することを前提としています。絶対に、ProductVariations以外の購入可能なエンティティをOrderItemから取得することは可能です。