前提・実現したいこと
wordpressを使用し、taxonomy.phpで表示されている商品一覧に
自作の簡易カートを設置したい。
・商品にそれぞれ個数を選択できるselectを設置
・カートに入れるbuttonに、
data-name = "商品名",
data-price = "値段",
data-number = "商品No",
data-id = "商品ID"
を設定しています。
また同じページに#cart-boxというdivを配置し、
その中にカートに入れた商品名、個数、総額をjqueryにて計算、表示。
formのimputでそのデータをpostして次ページで内容を表示する。
発生している問題・エラーメッセージ
dataをconfirm.phpで$_SESSIONを使い表示したときに、
$_SESSION['data']['name']としたときに、配列の中から取り出せるかなと思ったのですがうまいこといきません。
var_dumpで表示してみると、
string(375) "{"item_621":{"name":"テスト","price":1000,"number":"item_621","quantity":"1","sub_total":1000},"item_622":{"name":"テスト","price":1000,"number":"item_622","quantity":"1","sub_total":1000}}"
と出てきます。値はちゃんと送られているのですが、
なんとなく、[]がなくて、配列じゃないような気がします...
次ページで
商品名 0000 0個 ¥0000
商品名 0000 0個 ¥0000
商品名 0000 0個 ¥0000
合計金額 ¥0000
というふうに、値をそれぞれ取って表示するためには
どのように$_SESSIONを使ったらよいのでしょうか?
[taxonomy.php]
※ループ文などは省きました。
<?php /* Template Name: 商品アーカイブ */ get_header() ?><?php get_footer() ?><h2 class="taxonomy_title"><p><?php echo single_cat_title() ?></p></h2> <div class="taxonomy_box"> <!-- 商品ボックス --> </div> <p class="name"><?php echo the_title() ?></p> <p class="subname"><?php echo $subname ?></p> <p class="price"><?php echo $price ?><span>円(税込)</span></p> <div class="cart_cont"> <select name="items" id="<?php echo $select ?>"> <?php for ($i=1; $i <= 50; $i++) { echo '<option>'.$i.'</option>'; } ?> </select> <button type="button" class="add_cart" title="カートに追加" data-name ="<?php echo the_title() ?>" data-price ="<?php echo $price ?>" data-number ="<?php echo $item_num ?>" data-id ="#<?php echo $select ?>" >カートに入れる</button> </div> </div> <!-- 商品ボックスここまで --> </div> <div class="cart_box"> <div id="item_list"></div> <div id="go_cart"> <a href="#">次ページへ</a> </div> </div> <form id="cart_form" name="cart_form" action="<?php echo home_url() ?>/cart_confirm" method="post"> <input type="hidden" id="data" name="data"></form>
cartin.js(表示や計算などを設定しました)
$(document).ready(function(){
var items = new Object();
$(document).on('click',".add_cart", function(){
var data = $(this).data(); var quantity = $(data.id).val(); var sub_total = data.price * quantity; items[data.number] = new Object(); items[data.number] = { 'name':data.name, 'price':data.price, 'number':data.number, 'quantity':quantity, 'sub_total':sub_total }; cart_open();
});
var cart_open = function(){
$('#item_list').html('');; var html = '<ul>'; var key; var total = 0; for ( key in items) { html += '<li>'+items[key].name+'個数'+items[key].quantity+' + '+comma(items[key].sub_total)+'円</li>'; total += items[key].sub_total; }; var data = JSON.stringify(items); $("#item_list").html(html); $("#cart_box").show(); $("#data").val(data);
}
$(document).on('click',"#go_cart a", function(){
document.cart_form.submit();
});
$(document).on('click',"#close_cart span",function(){
$("#cart_box").hide();
});
});
confirm.php
<?php /* Template Name: カートページ */ get_header(); session_start(); $post_data = stripslashes_deep($_POST['data']); $_SESSION['data'] = $post_data; ?> <p><?php var_dump(htmlspecialchars($_SESSION['data'])) ?></p> <?phpget_footer();?>
補足情報
wordpress ver4.9.5 です
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。