welcart

WelCart の Post id を使った SKU の入出力

welcart の専用関数はどうも使いにくく・・・

紐付けをたどらないとIOも結構面倒。

ということで、WelCart の Post ID を指定して SKU を入出力したいと考えました。

データ構造は、こちらで解析しましたのでご確認ください⇒WelCart の SKU データ構造の追跡

WelCart Post ID での SKU 入力

Welcart の SKU は、Post のメタデータで保管されているので Post ID でメタデータを読み込める get_post_meta で読み込みます。

sku の入っているメタデータのキーは _isku_ です。

以下が読み込みモジュールになります。

/********************************************************/
function yuzu_cartcstm_sku_get($post_id)
/********************************************************/
{
$skus = get_post_meta( $post_id, ′_isku_′);
//— $sku —
//sku[0]["code"]
//sku[0]["name"]=>
//sku[0]["cprice"]=>
//sku[0]["price"]=>
//sku[0]["unit"]=>
//sku[0]["stocknum"]=>
//sku[0]["stock"]=>
//sku[0]["gp"]=>
//sku[0]["sort"]=>
//sku[0]["advance"]=>
//sku[1]["code"]
//sku[1]["name"]=>
//
return($skus);
}


WelCart Post ID での SKU 出力

WelCart の sku は、前述のように Post のメタデータになりますが、メタデータの出力は、単に 出力~!ではなく、メタデータが存在していなければ add 、存在していたら update と2段構えです。

そのため以下のような構造になります。
※以下はメタデータ出力のパターンなので覚えておくと便利です。

/********************************************************/
function yuzu_cartcstm_sku_put($post_id,$meta_value)
/********************************************************/
{
if( ! add_post_meta( $post_id, ′_isku_′, $meta_value, true) ){
update_post_meta( $post_id, ′_isku_′, $meta_value);
}
}

WelCart の Post ID をつかった sku の入出力

使い方は極めて簡単。

Post_ID は、わかっているものとします。

$post_id = ターゲットの商品の POST ID;
$skus = yuzu_cartcstm_sku_get($post_id); // 読み込み

$skus は、配列番号、項目キーの2次元配列になっています。
仮に 2個目の SKU の Sku Code を書き換えるなら

$skus[1][‘code’] = ‘WM0001’;

で、書き込みます。

書き込むときに注意したいのは1行づつ書き込まないといけない。
そのようにモジュールをかいているからwww
書き込みモジュール内でループを回す手もありますけど、なるべくプレーンにwww

出力はこんな感じになります。

foreach($skus as $k=>$v){
yuzu_cartcstm_sku_put($post_id,$skus[$k]);
}

項目を追加してある場合は、追加キー項目がなぜか advance に固定になっているので advance に対して操作を行うことで書き込みができます。

$skus[1][‘advance’] = ’11kg’;

なぜキー項目が固定化と言えばwww

エントリーフィールドを表示させる時、簡単だからでしょう。たぶんwww

2個あったらどうするんだろう? まだよく調べていませんが、まぁ、とりあえず。


実際の _isku_ への書き出し

実際に _isku_ へ書き出す場合には、先のモジュールでは書き出しに問題があります。

それは、sku が複数個存在する場合です。

_isku_ は、実は配列型になっているため、読み込んだ sku データを更新してそのまま PUT してしまうと、最後の1件しか書き込まれません。

そのため、実際には、

$fields = yuzu_cartcstm_sku_get($post_id);

$field 編集処理

delete_post_meta($post_id,′_isku_′);foreach($fields as $k2=>$meta_value ){
add_post_meta( $post_id, ′_isku_′, $meta_value, false)
}
のように、読み込んでおいて書き込むときに _isku_ を削除して、追加していくといった方法をとります。

仮に add_post_meta の第4引数を false(キーの重複を許す) にしても現在のものに追加されてしまいます。

そこで、add_post_meta の第4引数を false にしておいて、1行づつ追加していく形にします。


あなたの welcart のカスタマイズの一助になれば幸いです。



スポンサードリンク

関連記事一覧