なにこれ
WooCommerceの商品追加をプログラムから動的に行いたい時にどうすればよいのかについて書いたもの
バリエーションのある商品を対象とする。
そのメモ
コード(結論)
// 新しい可変商品を作成
$product = new WC_Product_Variable();
// 商品情報を設定
$product->set_name( '可変商品名' ); // 商品名を設定
$product->set_description( '商品説明' ); // 商品説明を設定
$product->set_regular_price( '1000' ); // 通常価格を設定
$product->set_status( 'publish' ); // 公開状態を設定
// 商品バリエーションを作成
$attribute1 = new WC_Product_Attribute();
$attribute1->set_name( 'color' );
$attribute1->set_options( array( 'red', 'green', 'blue' ) );
$attribute1->set_visible( true ); // フロントエンドで表示するかどうか
$attribute1->set_variation( true ); // バリエーションで使用するかどうか
$attribute2 = new WC_Product_Attribute();
$attribute2->set_name( 'size' );
$attribute2->set_options( array( 'small', 'medium', 'large' ) );
$attribute2->set_visible( true ); // フロントエンドで表示するかどうか
$attribute2->set_variation( true ); // バリエーションで使用するかどうか
$product->set_attributes( array( $attribute1, $attribute2 ) ); // 属性を設定
// 商品の保存、商品IDの取得
$product_id = $product->save();
// 商品バリエーションを追加
$variation = new WC_Product_Variation();
$variation->set_attributes( array(
'color' => 'red',
'size' => 'small'
) ); // 属性を設定
$variation->set_regular_price( '1100' ); // 通常価格を設定
$variation->set_parent_id( $product_id ); // 商品との紐づけ
$variation->save();
// 商品の更新
$product->save();
手順とか
- 商品を登録する
- バリエーションで利用する属性を追加する
- 属性で定義したものをキーにバリエーションを作成する
- 作成したバリエーションと商品ID(post_id)を紐づける
気になるところ
既存の属性を利用する場合はどうすればいいのか?
多分WC_Product_Attributeのインスタンスを作るときにID指定すればいいんじゃなかろうかと思うがまだ試していない。