おすすめ商品の「アップセル」を、勝手に自動で相互登録していくphp。
一方の商品でアップセルを登録すると、登録された商品にもそのおすすめが登録されていく。
例)Aのアップセル(B・C・D)で登録すると、
Bのアップセル=A・C・D
Cのアップセル=A・B・D
Dのアップセル=A・B・C
ただし、どの商品にもこれを適応させると、無限に増えるので
今回は商品カテゴリーを「new-colection」と「set」に限定している。
add_actionの設置場所がわからず、とりあえず商品ページのフッター読み込み時にしている。なので、一度商品ページのプレビューは読み込まないと相互登録されない。
アップセルもできるのでクロスセルも同じくできるはず。
function.php
//アップセル商品を自動で相互登録する(どこで発火させるのかわからなかったのでとりあえずフッター読み込み時に)
add_action( 'wp_footer', 'show_up_sell_in_single_product' );
function show_up_sell_in_single_product(){
$terms = get_the_terms( get_the_ID(), 'product_cat' );
//商品カテゴリー「new-collection」か「set」
if(( $terms[0]->slug == 'new-colection' || $terms[0]->slug == 'set') ){
//アップセルの商品取得
$upsells = get_post_meta( get_the_ID(), '_upsell_ids',true);
if(is_array($upsells)){
foreach( $upsells as $upsell){
$upsell_up = get_post_meta( $upsell , '_upsell_ids',true);
//アップセルの商品にすでにアップセルがある場合
if(is_array($upsell_up)){
//$upsellのアップセルにそのページの商品を追加
array_push($upsell_up,get_the_ID());
//さらにほかのアップセルも追加
$upsells_merge = array_merge($upsell_up , $upsells);
//アップセルに同じ商品が出ないように削除する
$key = array_search($upsell,$upsells_merge);
unset($upsells_merge[$key]);
//キーを連番に振り直し
$upsells_merge = array_values($upsells_merge);
update_post_meta( $upsell, '_upsell_ids', array_unique($upsells_merge));
//削除した商品を戻す
array_push($upsell_up,$upsell);
}else{
//アップセルに同じ商品が出ないように削除する
$key = array_search($upsell,$upsells);
unset($upsells[$key]);
//キーを連番に振り直し
$upsells = array_values($upsells);
update_post_meta( $upsell, '_upsell_ids' ,array_unique($upsells));
//削除した商品を戻す
array_push($upsells,$upsell);
}
}
}
}
}