質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

5111閲覧

WordPressプラグインのWelcartで送料を商品の重量(個口数)で設定するためのカスタマイズでSKUの重量が取得できない

tks8888

総合スコア10

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/12/27 07:27

編集2018/12/28 02:59

前提・実現したいこと

WordPressプラグインのWelcartで通販サイトを作っています。
同時に注文した商品のサイズによって発送の個口数が変わるため、個口数によって請求する送料が変わるようにしたい。
商品のSKUに重量を設定して、同時に注文した商品の合計重量で個口数を計算し、「個口数×送り先の都道府県別の送料」を計算して請求できるようにしたい。

発生している問題・エラーメッセージ

検索して調べて、SKUに重量を設定するところまではできたが、注文された商品の重量の合計を取得する方法がわからない。
SKUで設定した重量が保存されていないのか、取得方法が間違っているようで、取得しても空欄になってしまう。

試したこと

次のサイトを参考に、重量を設定できるようにしました。
http://web.contempo.jp/weblog/tips/welcart%E3%81%AEsku%E5%86%85%E3%81%AB%E5%85%A5%E5%8A%9B%E9%A0%85%E7%9B%AE%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E3%80%82

ここで設定した重量をもとに、個口数を計算して、送り先の都道府県別送料×個口数で送料を出したいができていない。

次のサイトを参考に、個口数を計算して、送り先の都道府県別送料×個口数で送料を出そうとしたが、SKUに追加した重量を取得すると値が0になっていて正しい値が取得できない。
https://teratail.com/questions/100686

var_dump($carts);で出力を確認したところ、 「["advance"]=> string(0) ""」となっていて重量のカスタム項目が正しく保存されていないのか、取得できていない状況。

ソースコード

SKUに重量のカスタム項目を追加する部分
functions.phpに記述しています。

PHP

1add_filter( 'usces_filter_sku_meta_form_advance_title', 'add_new_sku_meta_title'); //項目を追加 2function add_new_sku_meta_title(){ 3 return '<th colspan="2">カスタム項目</th>'; 4} 5 6add_filter( 'usces_filter_sku_meta_form_advance_field', 'add_new_sku_meta_field'); //フィールドを新規追加 7function add_new_sku_meta_field(){ 8 return '<td colspan="2" class="item-sku-zaikonum"><input name="newskuadvance" type="text" id="newskuadvance" class="newskuadvance metaboxfield" /></td>'."n"; 9} 10 11add_filter( 'usces_filter_sku_meta_row_advance', 'add_new_sku_meta_row_advance',10,2); //フィールドを追加 12function add_new_sku_meta_row_advance( $default_field, $sku ){ 13 $metaname = 'itemsku[' .$sku["meta_id"]. '][skuadvance]'; 14 return '<td colspan="2" class="item-sku-zaikonum"><input name="' .$metaname.'" type="text" id="' .$metaname. '" class="newskuadvance metaboxfield" value="' .$sku["advance"]. '"/></td>'."n"; 15} 16 17add_filter( 'usces_filter_add_item_sku_meta_value', 'add_new_sku_meta'); //新規項目を作成 18function add_new_sku_meta($value){ 19 $skuadvance = isset($_POST['newskuadvance']) ? $_POST['newskuadvance'] : ''; 20 $value['advance'] = $skuadvance; 21 return $value; 22} 23 24add_filter( 'usces_filter_up_item_sku_meta_value', 'up_new_sku_meta'); //項目を変更 25function up_new_sku_meta($value){ 26 $skuadvance = isset($_POST['skuadvance']) ? $_POST['skuadvance'] : ''; 27 $value['advance'] = $skuadvance; 28 return $value; 29} 30 31add_filter( 'usces_filter_item_save_sku_metadata', 'save_new_sku_meta',10,2 ); //項目を保持 32function save_new_sku_meta( $skus, $mid ){ 33 $skuadvance = isset($_POST['itemsku'][$mid]['skuadvance']) ? $_POST['itemsku'][$mid]['skuadvance']: ''; 34 $skus['advance'] = $skuadvance; 35 return $skus; 36}

重量で送料を再計算する部分
functions.phpに記述しています。

PHP

1// 重量2までを1個口として送料を重量で計算しなおす 2add_filter('usces_filter_set_cart_fees_shipping_charge', 'custom_filter_set_shipping_charge', 10, 3); 3function custom_filter_set_shipping_charge($shipping_charge, $carts, $entries){ 4 5 $weight = 0; 6 foreach($carts as $cart){ 7 $weight += $cart['advance']; //重量を加算したいが、$cart['advance']の値が0になっている 8 } 9 $shipping_charge = intval( $weight / 2 + 0.5 ) * $shipping_charge; 10 return $shipping_charge; 11}

補足情報(FW/ツールのバージョンなど)

WordPress 5.0.2
PHP 7.3.0
Welcart 1.9.14

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/12/27 12:12

custom_filter_set_shipping_charge関数の頭で$cartsをvar_dumpしてみてください。どのような出力がえられますか?
tks8888

2018/12/28 00:54

ありがとうございます。 custom_filter_set_shipping_chargeの頭でvar_dump($carts);したところ、次の出力が得られました。 array(1) { [0]=> array(7) { ["serial"]=> string(37) "a:1:{i:1540;a:1:{s:7:"sample1";i:0;}}" ["post_id"]=> int(1540) ["sku"]=> string(7) "sample1" ["options"]=> array(0) { } ["price"]=> string(4) "1000" ["quantity"]=> int(3) ["advance"]=> string(0) "" } } 商品登録ページでは重量を設定して保存されていますが、ここでは重量の["advance"]は空欄になっているようです。 よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2018/12/28 02:48

追記、ご確認ありがとうございます。 $carts["advance"]が正常に保存されていないようなので、保存処理としてフックしている関数が正常に動いているか確認して、問題の切り分けをはかってみてはいかがでしょうか。(保存処理そのものが実行されているか、_POSTで取得している値が適切か、など)
guest

回答1

0

自己解決

難しそうなので他のシステムを使うことにしました。

投稿2018/12/30 07:32

tks8888

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問