썸네일에 있는 라벨(뱃지)을 변경하고싶어요.

단순상품으로 등록하면 라벨에 할인 퍼센트로 표시되는데

옵션상품으로 등록하면 라벨이 단순 SALE로 표시되는데 퍼센트로 표시하고싶은데 어떻게하면 될까요?

사진첨부같이해드립니다.

https://imgur.com/a/0B3odPF

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
  • 안녕하세요~^^

    우커머스 woocommerce_sale_flash 필터를 사용하시면 해당 문구를 수정하실 수 있습니다.

    워드프레스 관리자 -> 외모 -> 테마 편집기 페이지에서 functions.php 파일 하단에

    아래의 코드를 추가해보시겠어요?

    add_filter('woocommerce_sale_flash', 'my_woocommerce_sale_flash', 10, 3 ); 
    function my_woocommerce_sale_flash($html, $post, $product){
    	$regular_price = (float) $product->get_regular_price();
    	$sale_price = (float) $product->get_price();
    	
    	$saving_percentage = round(100 - ($sale_price / $regular_price * 100), 0) . '%';
    	
    	return sprintf('<span class="onsale">-%s</span>', $saving_percentage);
    };

    고맙습니다.

  • @스레드봇

    매번 답변주셔서 감사합니다.

    코드 추가 후 확인했는데 뱃지부분에 --INF% 으로 표시되는데

    상품등록시 옵션->기본값을 변경해야할까요?

    아니면 다른 방법이 있을까요?

  • 우커머스 상품 쪽 설정 문제는 아닌 듯합니다.

    PHP에서 INF는 무한대를 뜻합니다.

    뭔가 연산이 잘못됐거나 가격이 잘못됐을 수도 있습니다.

    실제 적용하신 코드와 정상 가격, 할인 가격 정보도 알려주시겠어요?

    고맙습니다.

  • @스레드봇

    https://imgur.com/a/c1CO3qs

    https://imgur.com/lD5fGhR

    사진으로 첨부해서 보내드립니다.

    코드는 위댓글에 알려주신 경로에 그대로 작업했습니다.

  • 저희 쪽 테스트 서버에서 같은 가격으로 테스트해봤지만 -18%로 표시하고 있습니다.

    기존의 코드 대신 아래의 코드로 적용해서

    각각의 값들이 어떻게 표시되는지도 확인해보시겠어요?

    add_filter('woocommerce_sale_flash', 'my_woocommerce_sale_flash', 10, 3 );
    function my_woocommerce_sale_flash($html, $post, $product){
    	$regular_price = (float) $product->get_regular_price();
    	$sale_price = (float) $product->get_price();
    	
    	$saving_percentage = round(100 - ($sale_price / $regular_price * 100), 0) . '%';
    	
    	echo '$regular_price : ' . $regular_price . '<br>';
    	echo '$sale_price : ' . $sale_price . '<br>';
    	echo '$saving_percentage : ' . $saving_percentage;
    	
    	return sprintf('<span class="onsale">-%s</span>', $saving_percentage);
    };

    고맙습니다.

  • @스레드봇

    알려주신 코드 작성하여 홈페이지 확인결과

    디버그모드에서 확인해보면 $regular_price : 0 으로 되어있어서 그런거일까요?

    만약에 그렇다면 $regular_price을 어떻게 설정해야하는지 궁금합니다...

    https://imgur.com/a/KG73K7w

  • @스레드봇

    각각 옵션의 정상가격을 책정했는데에도 불구하고

    계속 0으로 나오는거 보니 이상하네요.. 왜그럴까요?

  • 안녕하세요.

    우커머스의 get_regular_price 함수는 상품의 정상 가격을 가져오는 함수입니다.

    정상 가격을 설정했음에도 0으로 표시되는 문제는

    뭔가 충돌이 있는 건 아닌지 확인해보시겠어요?

    잠시 다른 테마로 바꿔서 확인해보시고

    다른 플러그인을 하나씩 비활성화해가면서 충돌이 있는지 점검해보셔야 할 듯합니다.

    고맙습니다.

  • @스레드봇

    자문자답합니다.

    위 댓글에 알려주신 코드

    add_filter('woocommerce_sale_flash', 'my_woocommerce_sale_flash', 10, 3 ); 
    function my_woocommerce_sale_flash($html, $post, $product){
    	$regular_price = (float) $product->get_regular_price();
    	$sale_price = (float) $product->get_price();
    	
    	$saving_percentage = round(100 - ($sale_price / $regular_price * 100), 0) . '%';
    	
    	return sprintf('<span class="onsale">-%s</span>', $saving_percentage);
    };

    이 코드는 단일(단품)상품은의 세일 퍼센트를 표시하는 코드이고

     

    옵션이 설정된 상품(옵션상품)은

    add_filter('woocommerce_sale_flash', 'my_woocommerce_sale_flash', 10, 3 ); 
    function my_woocommerce_sale_flash($html, $post, $product){
    	$variation_regular_price = (float) $product->get_variation_regular_price();
    	$variation_sale_price = (float) $product->get_variation_price();
    	
    	$saving_percentage = round(100 - ($variation_sale_price / $variation_regular_price * 100), 0) . '%';
    	
    	return sprintf('<span class="onsale">-%s</span>', $saving_percentage);
    };

    으로 해당값을 variation_ 으로 변경하여 코드를 넣어야 정상적으로 나오네요.

     

    코드조차 몰랐는데 코드까지 자세히 적어주시고 도와주셔서 정말 감사합니다!!

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기