본문 바로가기
카테고리 없음

[워드프레스/우커머스(woocommerce)] "내 정보>주문>주문 상세"에서 내가 산 물건들 '장바구니 다시담기' 버튼 만들기

by 프로그래머콩 2019. 2. 1.
[워드프레스/우커머스(woocommerce)] 
"내 정보>주문>주문 상세"에서 
내가 산 물건들 '장바구니 다시담기' 버튼 만들기



경로 wp-content/plugins/woocommerce/templages 아래 있는 
order/order-details.php를 복사한 뒤



경로 wp-content/themes/(내 테마 폴더)/woocommerce/order/ 아래에 붙여넣는다.


* 내 테마 폴더 아래에 woocommerce 폴더가 없다면
woocommerce폴더 생성 -> 그 아래에 order폴더도 생성해서 아래 그림과 경로를 똑같이 만들고, 
 order 폴더 안에 order-details.php파일을 붙여넣는다.






테마 하위에 있는 order-details.php파일을 수정한다.
( 장바구니 다시 담기 버튼을 만들어주기 위함 )



. . . // $product->id = 구매한 상품 번호(id) // $item[item_meta][_qty][0] = 구매 수량 ?> <input type="hidden" class="items" data-id="<?php echo $product->id; ?>" data-qty="<?php echo $item[item_meta][_qty][0]; ?>" /> <?php } ?> <?php do_action( 'woocommerce_order_items_table', $order ); ?> <button class="multiple_add_to_cart_button">장바구니 다시 담기</button> . . .

* < input type=hidden ... >는 각 아이템구매수량과 구매한 상품의 번호를 저장할 용도로 만들었음.
(li에 포함시켜도 상관 x)

* <buttom class="multiple_add_to_cart_button">... 은 장바구니 다시 담기 버튼 역할.


작성을 완료하고 먼저 실행하면 아래와 같이 나타난다.
 (input은 type이 hidden이라 요소검사를 통해서만 보이고, 버튼은 테마에 포함된 기본 디자인 임)














- script(js) : '장바구니 다시 담기' 버튼 누르면 일어날 액션 구현(ajax포함)

$('.multiple_add_to_cart_button').on('click',function(){ get_mutiple_add_cart(); }); function get_mutiple_add_cart(){ var products = []; $.each($('.items'),function( index, value ) { var p1 = {}; p1['id'] = $(this).attr('data-id');//'627'; p1['qty'] = $(this).attr('data-qty');//'3'; products.push(p1); }); console.log(products); $.ajax({ url: shk_obj.ajaxurl, type: 'post', data: { 'action' : 'multiple_add_to_cart', 'products' : products }, success:function(request){ console.log(request); }.bind(this) }); }

- function.php에서 ajax호출 받는 함수 구현 : add_to_cart함수 호출하는 내용

add_action( 'wp_ajax_multiple_add_to_cart', 'multiple_add_to_cart' ); function multiple_add_to_cart() { ob_start(); /* *Decode json to a post varioable */ $products = $_POST['products']; $errors = false; $errorArr = array(); /* for each product, json decode data & deal with it as per original add to cart function */ foreach ($products as $product) { $prod = $product; $product_id = apply_filters( 'woocommerce_add_to_cart_product_id', absint( $prod[id] ) ); $quantity = empty( $prod[qty] ) ? 1 : wc_stock_amount( $prod[qty] ); $passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity ); $product_status = get_post_status( $product_id ); if ( $passed_validation && false !== WC()->cart->add_to_cart( $product_id, $quantity ) && 'publish' === $product_status ) { array_push($errorArr, $product[id] ); do_action( 'woocommerce_ajax_added_to_cart', $product_id ); } else { /* * If product had errors add it to error array for output at end - to inspect later with js. */ $errors = true; $object = (object) ['id' => $product_id, 'valid' => $passed_validation, 'Status' => $product_status]; $errorArray[] = $object; } } die(json_encode($errorArr)); }
결과 확인




- 장바구니 다시담기 눌렀을 때




- 장바구니가서 물품 제대로 담겼는지 확인