우커머스 상품 가격을 만원 단위로 표시하는 방법

Last Updated: 2023년 07월 16일 | | 5개 댓글

워드프레스 우커머스에서 상점과 개별 상품 페이지에서 가격을 만원 단위로 표시하고 싶은 경우가 있을 수 있습니다. 이 경우 적절한  PHP 코드를 응용하여 가격을 원하는 대로 표시할 수 있습니다.

가령 이 phpschool 문서에 나와 있는 코드를 응용해볼 수 있을 것입니다. 하지만 PHP 7.0 이상 버전에서는 오류가 발생하네요.

그냥 무식하게 코드를 하나 만들어보았습니다. 전 PHP에 까막눈이기 때문에 제 머리 속에 있는 생각을 if...else... 구문만을 사용하여 급조했습니다ㅎㅎ.

// 상점 페이지와 개별 상품 페이지 및 카테고리 페이지의 상품 가격을 만원 단위로 표시하기

add_filter('woocommerce_get_price_html', 'korean_units', 100, 2);
function korean_units($price, $product) {

$man = intval($product->get_regular_price()/10000);
$remain = $product->get_regular_price()%10000;
if($man == 0){
$regresult = $remain . '원';
}
else {
if($remain != 0) {
$regresult = $man . '만 ' . $remain . '원';
}
else {
$regresult = $man . '만 원';
}
}
$result = $regresult;

if ( $product->is_on_sale() ) {
$man = intval($product->get_sale_price()/10000);
$remain = $product->get_sale_price()%10000;
if($man == 0){
$saleresult = $remain . '원';
}
else {
if($remain != 0) {
$saleresult = $man . '만 ' . $remain . '원';
}
else {
$saleresult = $man . '만 원';
}
}
$result = '<span style="color:red"><del>' . $regresult . '</del></span> ' . $saleresult;
}
$price = $result;
return $price;

}

* 기존 코드는 $product->reqular_price등을 사용하면 'regular_price 은 잘못불렀습니다. 제품 속성에 직접 접근해서는 안 됩니다.라는 오류가 발생하여 제품 가격을 불러오는 코드를 대체했습니다(참고).

PHP 7.2 환경에서 테스트해보니 잘 작동하네요. 테마는 Avada 테마를 사용했고, 우커머스 버전은 3.3.1이었습니다. (참고로 최근 워드프레스에서 권장 PHP 버전을 7.2로 조정했습니다. "워드프레스에서 권장 PHP 버전을 7.2 이상으로 조정"을 참고해보세요.)

예를 들어, 1,135,200원은 '113만 5200원'으로 표시되고, 5300원은 그냥 '5300원'으로 표시됩니다. 또, 옵션 상품에 대해서는 고려하지 않았습니다. 옵션 상품에서 위의 코드가 제대로 작동하지 않으면 가격을 불러오는 함수를 체크하여 가격 부분을 대체해주시기 바랍니다.

그리고 할인 가격이 있을 경우에는 113만 5200원 99만 원과 같이 표시되도록 했습니다.

위의 코드는 충분히 테스트를 거치지 않았습니다. 더 완벽한 코드를 만드시는 경우 알려주시면 코드를 업데이트하도록 하겠습니다.

아래는 실제 작동 예시 화면입니다.

우커머스 상품 가격을 만원 단위로 표시하는 방법 5
상점 페이지
우커머스 상품 가격을 만원 단위로 표시하는 방법 6
개별 상품 페이지 (가격 할인 없음)
우커머스 상품 가격을 만원 단위로 표시하는 방법 7
개별 상품 페이지 (세일 가격 적용)

위의 코드는 상점 페이지와 개별 상품 페이지, 아카이브 페이지(예: 카테고리 페이지) 등에 적용되고 장바구니 페이지에서는 적용되지 않습니다. 장바구니 페이지에 표시되는 가격은 woocommerce_cart_item_price 필터를 사용하여 조정할 수 있습니다.

예를 들어, 다음과 같은 코드를 적용해보면...

// 장바구내의 상품 가격을 만원 단위로 표시하도록 변경하기

add_filter( 'woocommerce_cart_item_price', 'cart_item_price_ko', 10, 3 );
function cart_item_price_ko( $price, $cart_item, $cart_item_key ) {

$man = intval($cart_item['data']->get_price()/10000);
$remain = $cart_item['data']->get_price()%10000;
if($man == 0){
$result = $remain . '원';
}
else {
if($remain != 0) {
$result = $man . '만 ' . $remain . '원';
}
else {
$result = $man . '만 원';
}
}
$price = $result;
return $price;
}

다음과 같이 장바구니 내의 가격이 표시됩니다.

우커머스 상품 가격을 만원 단위로 표시하는 방법 8
장바구니 내의 가격 표시 변경

총계 부분의 경우, 해당 후크를 확인하여 마찬가지 방법으로 가격을 만원 단위로 표시할 수 있습니다.

만약 101만 4천 400원 식으로 천원 단위까지 표시하고 싶다면 상기 코드에서 1000원 부분까지 고려하여 코드를 조금 수정해주면 될 것입니다.

다시 한번 말씀드리지만, 상기 코드는 충분한 테스트를 거치지 않았습니다. 적절히 수정하여 사용하시기 바랍니다.

참고:


5 개 댓글

Leave a Comment

  1. 방금 테스트해보니 $cart_item['data']->price도 같은 오류가 뜨네요 $cart_item['data']->get_price()로 수정해서 테스트해보니 잘 되는거 같습니다.

    응답
    • 테스트 사이트에서 오류가 나지 않아서 그대로 두었는데, 이 부분도 같은 오류가 있는가 보네요. 오류를 수정했습니다.

      즐거운 하루 되세요^^

      응답
  2. 안녕하세요? 디버그 모드일떄 $product->reqular_price등을 사용하면 'regular_price 은 잘못불렀습니다. 제품 속성에 직접 접근해서는 안 됩니다.'라고 notice가 뜨는데 괜찮은건가요?

    응답