Woocommerce의 단일 product.php에서 제품이 특정 카테고리에 있는지 확인하는 방법은 무엇입니까?


25

제품이 single-product.php 의 특정 제품 범주에 속하는지 어떻게 세계에서 확인할 수 있습니까?

<?php if (is_product_category('audio')) {
           echo 'In audio';
               woocommerce_get_template_part( 'content', 'single-product' );

      } elseif (is_product_category('elektro')) {

            echo 'In elektro';
            woocommerce_get_template_part( 'content', 'single-product' );
         } else {
            echo 'some blabla'; }  ?>

is_product_category ( 'slug')single-product.php 에 영향을 미치지 않습니다 . 나는 위의 조건을 갖고 싶다. 단일 제품 페이지에서 이에 대한 솔루션이 있습니까?


첫 번째 진술에 결말이 누락 되었기 때문일 수 있습니다 ). 그것은해야한다if (is_product_category('audio'))
stealthyninja

잘 잡았지만 그렇지 않습니다. is_product_category는 single-product.php에서 작동하지 않는 것 같습니다
Alex

답변:


28

get_categories()이 경우 앵커 태그로 나열된 모든 범주가있는 문자열을 반환하기 때문에 최선의 옵션 이라고 생각하지 않습니다 . 좋아, 그래서 당신이해야 할 첫 번째 일은 아직없는 경우 현재 페이지의 제품 / 게시물 개체를 가져 오는 것입니다.

global $post;

그런 다음 제품에 대한 제품 범주 용어 개체 (범주)를 얻을 수 있습니다. 여기에서는 범주 용어 객체를 명명 된 간단한 배열로 바꾸어 $categories어떤 슬러그가 할당되었는지 쉽게 확인할 수 있습니다. 현재 페이지 중 하나가 아니라 제품에 할당 된 모든 카테고리 를 반환 합니다/shop/audio/funzo/ .

$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;

그런 다음 카테고리가 목록에 있는지 확인해야합니다.

if ( in_array( 'audio', $categories ) ) {  // do something

함께 모아서:

<?php
global $post;
$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;

if ( in_array( 'audio', $categories ) ) {
  echo 'In audio';
  woocommerce_get_template_part( 'content', 'single-product' );
} elseif ( in_array( 'elektro', $categories ) ) {
  echo 'In elektro';
  woocommerce_get_template_part( 'content', 'single-product' );
} else {
  echo 'some blabla';
}

잘하면 이것이 당신이 찾고 있었고 당신의 질문에 대답하는 것입니다.


37

has_term 이 경우 작동해야합니다.

if ( has_term( 'audio', 'product_cat' ) ) {

       echo 'In audio';
       woocommerce_get_template_part( 'content', 'single-product' );

} elseif ( has_term( 'elektro', 'product_cat' ) ) {

       echo 'In elektro';
       woocommerce_get_template_part( 'content', 'single-product' );

} else {
       echo 'some blabla';
}

이 작업을 수행하는 매우 간단하고 효과적인 방법입니다. 나는 이것이 더 나은 대답이라고 생각합니다.
Trevor

짧았 기 때문에 이것을 선호했습니다. 그러나 나는if { thing; return;}
Eoin

8

각 범주에서 동일한 작업을 수행한다고 가정하면 많은 elseif 검사로 코드를 복잡하게 만들지 않고 배열을 호출하여 옵션 목록을 살펴볼 수 있습니다.

if( has_term( array( 'laptop', 'fridge', 'hats', 'magic wand' ), 'product_cat' ) ) :

// Do stuff here

else :

// Do some other stuff

endif;

이 답변은 편집으로 Milo의 ​​답변에 추가되어야한다고 생각합니다.
cybmeta


0

get_categories()WC_Product 클래스 의 기능을 사용하는 방법을 살펴 보겠습니다 .

여기 에서 설명서에 대한 링크를 찾을 수 있습니다 .

기본적으로 페이지 루프 내에서 함수를 호출하여 제품과 연관된 카테고리를 리턴하십시오.


이 코드를 작성할 수 없습니다. 이 작업을 수행하는 방법에 대한 단서가 없습니다. 누군가 이것을 설명하십시오. 나는 최선을 다했다. 이것을 get_categories ()로 바꿔야합니까?
Alex

@Alex is_product_category () 함수는 제품 카테고리 페이지에있는 경우 TRUE를 반환합니다. 제품의 카테고리가 아닙니다. 지금 프로젝트를 진행 중이지만 나중에 코드 스 니펫을 얻으려고 노력할 것입니다.
Steve

이 작은 스 니펫을 코딩하는 데 시간을내어 주셔서 감사합니다. 대단히 감사합니다.
Alex
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.