작성일

연관 상품(Related Products)을 슬라이드 구조로 만들기

연관 상품의 개수를 늘리고 슬라이드 형태로 보여지길 원하는 경우를 위해 적용해 보았습니다.

고려할 사항

  • 연관 상품의 개수 늘리기
  • 슬라이드 형태 적용을 위해 Owl Carousel css, js 추가
  • 연관 상품의 구조를 Owl Carousel화 하기
  • 테마에 맞게 스타일 조정

1. 연관 상품 개수 늘리기 (기본 4)

/**
 * Change number of related products output
 */ 
add_filter( 'woocommerce_output_related_products_args', 'custom_related_products_args', 20 );
  function custom_related_products_args( $args ) {
  $args['posts_per_page'] = 10; // 4 related products
//	$args['columns'] = 2; // owl carousel로 컬럼 수를 조정하기 때문에 필요 X 
  return $args;
}

 

2. Owl Carousel css, js 파일들을 head 태그 안에 enqueue (포함시키기)

OwlCarousel에서 파일들을 다운로드 후 압축을 풀면, dist > assets 폴더 안에 필요한 3가지 파일을 찾을 수 있고, 이것들을 테마에 폴더(ex: /addons/owlcarousel)를 하나 만들어서 업로드 합니다.

/**
 * Enqueue scripts of child theme
 */
function custom_enqueue_script() {    
    wp_register_style( 'owl-style', get_stylesheet_directory_uri() . '/addons/owlcarousel/owl.carousel.min.css', '', '1', 'all'); 
    wp_register_style( 'owl-theme', get_stylesheet_directory_uri() . '/addons/owlcarousel/owl.theme.default.min.css', '', '1', 'all'); 
    wp_register_script( 'owl-script', get_stylesheet_directory_uri() . '/addons/owlcarousel/owl.carousel.min.js', array('jquery'), '1', true);  // true = 푸터에서 적용, false = 헤더에서 적용
    if (is_woocommerce() && is_product()) { 
        wp_enqueue_style( 'owl-style' );  
        wp_enqueue_style( 'owl-theme' );  
        wp_enqueue_script( 'owl-script' ); 	
    }

}
add_action( 'wp_enqueue_scripts', 'custom_enqueue_script' );

연관 상품은 single product 에서 표시할 것이므로, is_product() 로 비교하여 enqueue시킴

 

3. 기본 연관 상품으로 표시되는 구조를 owl carousel 구조로 변경하기

wp_footer 훅을 이용하여, single product일때만 적용되는 스타일과, 스크립트를 등록합니다.

/**
 * Add scripts to wp_footer()
 */
function child_theme_footer_script() {   
  if (is_woocommerce() && is_product()) {  ?>
  
    <style>
      .site-main ul.products.columns-3 li.product {
        width:100% !important;
        margin-right:0 !important;
        margin-bottom:0 !important;
      }
      .related .owl-nav {text-align:center;margin-top:1rem;}
      .related .owl-nav button.owl-prev:before {
        content: '\f060';
        margin-right:10px;
        font-family: 'Font Awesome\ 5 Free';
      }
      .related .owl-nav button.owl-next:before {
        content: '\f061';
        margin-left:10px;
        font-family: 'Font Awesome\ 5 Free';
      }
    </style>
    <script type="text/javascript">			
      (function($) {			
        
        $(document).ready(function(){
          $('.related .products').addClass('owl-carousel');
          $('.owl-carousel').owlCarousel({
            margin:10,
            loop:true,
            nav:true, 
            dots:false,
            responsive:{
              0:{
                items:2
              },
              600:{
                items:3
              },
              1000:{
                items:4
              }
            }, 
            navText : ["",""],  // 대신 fontAwesome 아이콘으로 대체 						
          });
        });

      })( jQuery ); 		 
    </script>
<?php 	}
}
add_action( 'wp_footer', 'child_theme_footer_script', 99 );

owl carousel 의 스타일 및 스크립트가 제대로 동작을 하기 위해서는 변경될 구조 바로 위 html 태그에 ‘owl-carousel’ 클래스가 추가 돼 있어야 합니다. 그래서 우선 연관 상품리스트를 감싸고 있는 ul 태그에 ‘owl-carousel’ 클래스를 추가한 다음, 이어서 이 클래스를 이용해서 하위 li 태그로 감싸진 상품들을 슬라이드 요소로 바꿔주는 함수를 선언합니다.  (※ 자세한 사용법은 > owl carousel 문서 참조)

 

4. 스타일 수정

우커머스나 테마에서 미리 선언을 한 스타일 정의가 있기 때문에 3번으로 구조는 적용이 됐지만 원하는 모양이 바로 나오질 않습니다. 각 컬럼별로 상품이 꽉 차게, 그리고 아래쪽 네비게이션 화살표도 표시되도록 스타일 정의를 추가해 줍니다.

<style>
      .site-main ul.products.columns-3 li.product {
        width:100% !important;
        margin-right:0 !important;
        margin-bottom:0 !important;
      }
      .related .owl-nav {text-align:center;margin-top:1rem;}
      .related .owl-nav button.owl-prev:before {
        content: '\f060';
        margin-right:10px;
        font-family: 'Font Awesome\ 5 Free';
      }
      .related .owl-nav button.owl-next:before {
        content: '\f061';
        margin-left:10px;
        font-family: 'Font Awesome\ 5 Free';
      }
    </style>

위 3번에 이미 포함이 돼 있는 코드. fontAwesome 폰트는 이미 storefront 테마에 포함이 돼 있습니다. 만약 추가가 돼 있지 않은 테마의 경우엔 https://fontawesome.com/ 에서 안내된 방법으로 테마에 enqueue합니다.

 

위와 같이 진행한 결과, 총 10개의 연관 상품을 옆으로 넘기면서 볼 수 있는 슬라이드가 적용 되었습니다.

(모바일에선 2 컬럼이 나오도록 위에서 옵션 설정을 했음)

 

 

끝.