【Welcart】でSkuに新規項目を追加する方法
Welcartを利用している際に、商品に重量データを追加する必要がでてきました。
オプションに追加して選んでもらおうかと思いましたが、調べるとSkuのデータを拡張することができる模様。
というわけで早速実装してみました。
<?php //WelcartでSkuに追加項目 //重量項目を追加 add_filter( 'usces_filter_sku_meta_form_advance_title' , 'add_weight_title'); function add_weight_title(){ return '<th> </th><th>重量</th>'; } //重量フィールドを新規追加 add_filter( 'usces_filter_sku_meta_form_advance_field' , 'add_weight_field'); function add_weight_field(){ return '<td class="item-sku-price"> </td><td class="item-sku-zaikonum"><input type="text" id="newskuadvance" name="newskuadvance" class="newskuadvance metaboxfield" /></td>'; } //重量フィールドを追加 add_filter( 'usces_filter_sku_meta_row_advance' , 'add_weight_row_advance',10,2); function add_weight_row_advance($default_field,$sku){ $metaname = "itemsku[" . $sku["meta_id"] . "][skuadvance]"; return '<td class="item-sku-price"> </td><td class="item-sku-zaikonum"><input type="text" id="' . $metaname .'" name="' . $metaname . '" class="newskuweight metaboxfield" value="' . $sku['advance'] . '"/></td>'; } //新規項目を保存 add_filter( 'usces_filter_add_item_sku_meta_value' , 'add_weight_meta'); function add_weight_meta($value){ $advance = isset($_POST['newskuadvance']) ? $_POST['newskuadvance'] : ''; $value['advance'] = $advance["newskuadvance"]; return $value; } //項目を変更 add_filter( 'usces_filter_up_item_sku_meta_value' , 'up_weight_meta'); function up_weight_meta($value){ $advance = isset($_POST['skuadvance']) ? $_POST['skuadvance'] : ''; $value['advance'] = $advance; return $value; } ?>
usces_filter_sku_meta_form_advance_fieldというフィルターでSkuの入力部分が拡張できるようなのですが
困ったことにここにフィールドを追加したら自動で追加してくれるわけではなくJavascriptのほうでフィールド名を指定されていて
newskuadvanceおよびskuadvanceのフィールド名しか使えないようです。ちょっと不便ですね。
welcartでの送料の重量加算計算の方法について調べていたらここに辿り着きました。もし似たようなことが実現できていましたら具体的なアドバイス等頂ければと思います。。。
送料をフックするusces_filter_getShippingChargeというフィルターがあるので、
そこにフックしてそこで重量による送料処理を行えます。
ちょっと忙しくてまだ検証できてませんが多分それでできるんじゃないかなー?
返信ありがとうございます。フォーラムには検討中で対応できないというようなスレッドがあったのですがググりながらusces_filter_getShippingChargeやusces_filter_set_cart_fees_shipping_chargeで無事対応できました。
また上記のエントリーのコードをfunctions.phpに書いたことろ、SKUに重量の項目自体はできたのですが値を入れても保存をしてくれませんでした。一応ご報告までです。
サイズを登録できるようにして、シングルページでアイテムごとに図を表示するようなサイト設計を行っており、SKUごとにSKUADVANCEが入力できれば良いなと考えています。色々探したのですが、SKU内の新規項目について書かれているのこちらぐらいしかなく、勝手ながらコメントさせていただきました。
yamaさんが仰っているように、上記のfunctionでSKU毎の登録、更新はうまくいくんですが、商品記事全体の公開や更新を行ったときにSKUADVANCEが初期化されてしまいます。usces_filter_item_save_sku_metadataにフックすれば良かろうと思い、やってみたのですがどうにもうまくいきません。何かまずい点があればご指摘いただければ、大変助かります。
add_filter( 'usces_filter_item_save_sku_metadata' , 'save_weight_meta' );
function save_weight_meta( $skus, $meta_id ){
$skuadvance = isset($_POST['itemsku'][$meta_id]['skuadvance']) ? $_POST['itemsku'][$meta_id]['skuadvance']: '';
$skus['advance'] = $skuadvance;
return $skus;
}
ここに書き込んだ後に、add filterには引数の数を指定し忘れていることに気がつきました。その後、引数に2を渡してやると、うまく動きました。上記フィルター群の情報はたいへん助かりました。ありがとうございます。ご報告まで。
//項目を保持
add_filter( 'usces_filter_item_save_sku_metadata', 'save_weight_meta',10,2 );
function save_weight_meta( $skus, $mid ){
$skuadvance = isset($_POST['itemsku'][$mid]['skuadvance']) ? $_POST['itemsku'][$mid]['skuadvance']: '';
$skus['advance'] = $skuadvance;
return $skus;
}
[…] 【Welcart】でSkuに新規項目を追加する方法 […]
途中で処理がわからなくなって放置してたのですが色々参考になりました。こちらこそありがとうございます。