$product_id からその商品に登録しているバリエーションの情報が欲しいと思って、サクッと取れると思ったら、そういう関数が無いことに気がついてその取得方法を備忘録として書いております。
まずは商品がバリエーションを持っているかの判別
商品にバリエーションがない場合は探す必要がないと思うので、まずはその判別の方法。
これは、簡単で商品オブジェクトの is_type 関数を使えばいいです。
$product = wc_get_product( $product_id );
if( $product->is_type( 'variable' ) ){
...
}
バリエーションを持っている商品 ID から get_posts で取得
WordPress のちょー基本的なやり方でしか抜き出せなさそうです。
$args = array(
'post_type' => 'product_variation',// *1
'post_status' => array( 'private', 'publish' ),// *2
'numberposts' => -1,// *3
'orderby' => 'menu_order',// *4
'order' => 'asc',// *4
'post_parent' => $product_id
);
$variations = get_posts( $args );
foreach ( $variations as $variation ) {
// get variation ID
$variation_IDs[] = $variation->ID;
}
上記に記載の*を簡単に説明すると以下です。
*1の説明
バリエーションとして登録されているカスタム投稿タイプが'product_variation'なので検索タイプの変数をこれにします。
*2の説明
実際に使われているステータスを抜き出します。
*3の説明
念のために取得する数の制限を無くす。
*4の説明
取得の順番を指定されている通りにする。
これで、 $variation_IDs の配列にバリエーション ID 一覧が出来ます。