안녕하세요~ 우커머스 기능을 사용중입니다.
특정상품을 회원ID당 한번씩만 구매할 수 있게 중복구매방지 설정하는 방법이 있을까요?
안내해주신 코드를 삭제했지만 적용은 되지않았습니다.ㅜ
의뢰를 고려해보겠습니다. 도움 감사했습니다~
이전 댓글에 안내해드린 코드 중
아래의 코드는 지워보세요.
echo $no_repeats_id;
var_dump(wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $no_repeats_id ));
wc_customer_bought_product 함수의 결과가 false로 표시된다면
이미 구매한 적이 없거나 주문 상태가 처리중 또는 완료됨으로 적용되지 않은 듯합니다.
확인해보시겠어요?
그리고 커뮤니티에서는 100% 해결을 보장해드리긴 어렵습니다.
직접 코드를 수정하기 어려우신 상황이라면
적절한 비용을 지불하고 전문 업체 혹은 개발자에게 의뢰를 하셔야 합니다.
고맙습니다.
수정해주신 코드를 넣었는데 작동하지않습니다ㅜ
위 이미지처럼 false를 반환하는 거 같긴한데 그냥 결제로 넘어갑니다.
이전 댓글에 안내해드린 링크의 코드는 오래된 버전의 코드인 듯합니다.
아래의 코드로 교체해서 확인해보시겠어요?
/* 특정상품 중복 구매 금지 */
function sv_disable_repeat_purchase( $purchasable, $product ) {
/* 중복 구매를 금지할 상품의 ID */
$non_purchasable = 17132;
/* 현재 상품의 ID 체크 */
$product_id = $product->is_type( 'variation' ) ? $product->variation_id : $product->get_id();
/* 중복 구매 금지 상품의 ID와 일치하지 않는 경우 */
if ( $non_purchasable != $product_id ) {
return $purchasable;
}
/* 고객이 상품을 이전에 구매한 경우 False 반환 */
if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $product_id ) ) {
$purchasable = false;
}
/* 옵션 더블 체크: 상위 상품이 구매 불가능한 경우 옵션도 구매 불가능 */
if ( $purchasable && $product->is_type( 'variation' ) ) {
$purchasable = $product->parent->is_purchasable();
}
return $purchasable;
}
add_filter( 'woocommerce_variation_is_purchasable', 'sv_disable_repeat_purchase', 10, 2 );
add_filter( 'woocommerce_is_purchasable', 'sv_disable_repeat_purchase', 10, 2 );
/* 중복구매 불가능 메세지 띄우기 */
function sv_purchase_disabled_message() {
/* 중복 구매 금지 상품의 ID 입력 */
$no_repeats_id = 17132;
$no_repeats_product = wc_get_product( $no_repeats_id );
/* 구매가 불가능한지를 체크하기 위해 현재 상품 정보를 가져옴 */
global $product;
if ( $no_repeats_product->is_type( 'variation' ) ) {
/* 현재 상품 페이지가 구매 금지 상품의 상품 페이지가 아닌 경우 */
if ( ! $no_repeats_product->parent->id === $product->get_id() ) {
return;
}
} elseif ( $no_repeats_id === $product->get_id() ) {
echo $no_repeats_id;
var_dump(wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $no_repeats_id ));
if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $no_repeats_id ) ) {
/* 고객에게 표시할 메시지 */
echo '<div class="woocommerce"><div class="woocommerce-info wc-nonpurchasable-message">이 상품을 이미 구매하셨습니다. 이 상품은 한 번만 구매 가능합니다.</div></div>';
}
}
}
add_action( 'woocommerce_single_product_summary', 'sv_purchase_disabled_message', 31 );
그리고 상황에 따라서는 코드가 더 추가될 수도 있습니다.
코드 수정이 어려우시다면
프로젝트 의뢰에 상세 내용을 올려보세요.
https://www.cosmosfarm.com/project
고맙습니다.
안녕하세요. 답변 감사합니다.
/* 특정상품 중복 구매 금지 */
function sv_disable_repeat_purchase( $purchasable, $product ) {
/* 중복 구매를 금지할 상품의 ID */
$non_purchasable = 17132;
/* 현재 상품의 ID 체크 */
$product_id = $product->is_type( 'variation' ) ? $product->variation_id : $product->id;
/* 중복 구매 금지 상품의 ID와 일치하지 않는 경우 */
if ( $non_purchasable != $product_id ) {
return $purchasable;
}
/* 고객이 상품을 이전에 구매한 경우 False 반환 */
if ( wc_customer_bought_product( get_current_user()->user_email, get_current_user_id(), $product_id ) ) {
$purchasable = false;
}
/* 옵션 더블 체크: 상위 상품이 구매 불가능한 경우 옵션도 구매 불가능 */
if ( $purchasable && $product->is_type( 'variation' ) ) {
$purchasable = $product->parent->is_purchasable();
}
return $purchasable;
}
add_filter( 'woocommerce_variation_is_purchasable', 'sv_disable_repeat_purchase', 10, 2 );
add_filter( 'woocommerce_is_purchasable', 'sv_disable_repeat_purchase', 10, 2 );
/* 중복구매 불가능 메세지 띄우기 */
function sv_purchase_disabled_message() {
/* 중복 구매 금지 상품의 ID 입력 */
$no_repeats_id = 17132;
$no_repeats_product = wc_get_product( $no_repeats_id );
/* 구매가 불가능한지를 체크하기 위해 현재 상품 정보를 가져옴 */
global $product;
if ( $no_repeats_product->is_type( 'variation' ) ) {
/* 현재 상품 페이지가 구매 금지 상품의 상품 페이지가 아닌 경우 */
if ( ! $no_repeats_product->parent->id === $product->id ) {
return;
}
/* 구매 금지 상품 페이지에 있는 경우 메시지 출력 */
if ( wc_customer_bought_product( get_current_user()->user_email, get_current_user_id(), $no_repeats_id ) ) {
sv_render_variation_non_purchasable_message( $product, $no_repeats_id );
}
} elseif ( $no_repeats_id === $product->id ) {
if ( wc_customer_bought_product( get_current_user()->user_email, get_current_user_id(), $no_repeats_id ) ) {
/* 고객에게 표시할 메시지 */
echo '<div class="woocommerce"><div class="woocommerce-info wc-nonpurchasable-message">이 상품을 이미 구매하셨습니다. 이 상품은 한 번만 구매 가능합니다.</div></div>';
}
}
}
add_action( 'woocommerce_single_product_summary', 'sv_purchase_disabled_message', 31 );
관련링크를 참고해서 추가한 코드입니다. 수정한 부분은 상품 ID값 뿐인데 작동이 안되어서요.
혹시 아이디값을 제가 잘못 입력했을까요?ㅜㅜ 한번 확인부탁드립니다.
감사합니다.
안녕하세요~^^
우커머스 플러그인에서 한 상품에 대해
하나의 수량만 구매할 수 있게 하시려면 우커머스의 개별 판매 기능을 이용해보시겠어요?
워드프레스 관리자 -> 상품(Products) -> 모든 상품(All Products) -> 상품 선택 -> 재고(Inventory) -> 개별 판매(Sold individually) 설정을 체크해보시겠어요?
만약, 구매 자체를 중복으로 불가능하게 하시는 거라면
아래 관련 링크 참고 부탁드립니다.
https://www.thewordcracker.com/intermediate/prevent-repeat-purchase-in-woocommerce-in-wordpress/
고맙습니다.