WelCart の Post id を使った SKU の入出力
welcart の専用関数はどうも使いにくく・・・
紐付けをたどらないとIOも結構面倒。
ということで、WelCart の Post ID を指定して SKU を入出力したいと考えました。
データ構造は、こちらで解析しましたのでご確認ください⇒WelCart の SKU データ構造の追跡
sku の入っているメタデータのキーは _isku_ です。
以下が読み込みモジュールになります。
そのため以下のような構造になります。
※以下はメタデータ出力のパターンなので覚えておくと便利です。
/********************************************************/
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);
}
}
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個あったらどうするんだろう? まだよく調べていませんが、まぁ、とりあえず。
それは、sku が複数個存在する場合です。
_isku_ は、実は配列型になっているため、読み込んだ sku データを更新してそのまま PUT してしまうと、最後の1件しか書き込まれません。
そのため、実際には、
仮に add_post_meta の第4引数を false(キーの重複を許す) にしても現在のものに追加されてしまいます。
そこで、add_post_meta の第4引数を false にしておいて、1行づつ追加していく形にします。
あなたの 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);
}
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_ を削除して、追加していくといった方法をとります。:
$field 編集処理
:
delete_post_meta($post_id,′_isku_′);foreach($fields as $k2=>$meta_value ){
add_post_meta( $post_id, ′_isku_′, $meta_value, false)
}
仮に add_post_meta の第4引数を false(キーの重複を許す) にしても現在のものに追加されてしまいます。
そこで、add_post_meta の第4引数を false にしておいて、1行づつ追加していく形にします。
あなたの welcart のカスタマイズの一助になれば幸いです。