[워드프레스/우커머스(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));
}
결과 확인
- 장바구니 다시담기 눌렀을 때
- 장바구니가서 물품 제대로 담겼는지 확인
끝