주어진 카테고리 ID의 제품 목록을 가져옵니다.


14

주어진 카테고리 ID (카테고리 이름이 아님)에 대한 모든 제품 목록을 얻는 올바른 방법을 찾을 수 없습니다.

범주 목록을 얻는 데 사용하는 코드는 다음과 같습니다.

$args = array(
           'orderby'    => $orderby,
           'order'      => $order,
           'hide_empty' => 0,
           'include'    => $ids,
           'parent'    => 0,
     ); 

$categories = get_terms( 'product_cat', $args );

그러나 이제 주어진 카테고리 ID (47 번)에 대해 관련 제품을 얻는 방법을 찾을 수 없었습니다. 나는 다음과 같은 방법으로 시도했다 :

$args = array( 
    'posts_per_page' => 5,
    'offset'=> 1,
    'category' => 47
 );

$products = get_posts( $args );
echo var_dump($products);

$products배열 디버깅은 항상 0을 반환합니다. ID 47의 범주에 일부 제품이 있다는 것을 알고 있기 때문에 잘못되었습니다. 코드를 수정하는 방법에 대한 아이디어가 있습니까?


1
category또는 product_category?
fuxia

답변:


19

주된 문제는 당신이 WP_Query아닌 객체 를 사용해야 한다는 것 get_posts()입니다. 나중에 기본적으로 post_type이 product가 post아닌 항목 만 반환합니다 .

따라서 ID가 26 인 카테고리가 제공되면 다음 코드는 해당 제품을 반환합니다 (WooCommerce 3+)

    $args = array(
    'post_type'             => 'product',
    'post_status'           => 'publish',
    'ignore_sticky_posts'   => 1,
    'posts_per_page'        => '12',
    'tax_query'             => array(
        array(
            'taxonomy'      => 'product_cat',
            'field' => 'term_id', //This is optional, as it defaults to 'term_id'
            'terms'         => 26,
            'operator'      => 'IN' // Possible values are 'IN', 'NOT IN', 'AND'.
        ),
        array(
            'taxonomy'      => 'product_visibility',
            'field'         => 'slug',
            'terms'         => 'exclude-from-catalog', // Possibly 'exclude-from-search' too
            'operator'      => 'NOT IN'
        )
    )
);
$products = new WP_Query($args);
var_dump($products);

WooCommerce의 이전 버전에서 가시성은 메타 필드로 저장되었으므로 코드는 다음과 같습니다.

    $args = array(
    'post_type'             => 'product',
    'post_status'           => 'publish',
    'ignore_sticky_posts'   => 1,
    'posts_per_page'        => '12',
    'meta_query'            => array(
        array(
            'key'           => '_visibility',
            'value'         => array('catalog', 'visible'),
            'compare'       => 'IN'
        )
    ),
    'tax_query'             => array(
        array(
            'taxonomy'      => 'product_cat',
            'field' => 'term_id', //This is optional, as it defaults to 'term_id'
            'terms'         => 26,
            'operator'      => 'IN' // Possible values are 'IN', 'NOT IN', 'AND'.
        )
    )
);
$products = new WP_Query($args);
var_dump($products);

여기서는 페이지 당 12 개의 가시적 인 제품 만 반환합니다.

를 통해 찾아 보게 http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters 카테고리 타겟팅의 작동 방법에 대한 자세한 내용을 - 종종 ID보다는 슬러그하여 검색하는 것이 더 유용합니다!


해결책이 효과가있었습니다. 좋은 설명입니다.
Kamesh Jungi

1
Woocommerce 3부터는 가시성이 메타가 아닌 분류로 변경되므로 meta_query를 tax_query로 변경해야합니다. wordpress.stackexchange.com/a/262628/37355를 참조하십시오 .
jarnoan

당신의 결론 get_posts()이 잘못되었습니다. 당신은 대체 할 수 new WP_Query($args)get_posts($args)코드에서 그것은 작동합니다.
Bjorn

3
$products = wc_get_products(array(
    'category' => array('your-category-slug'),
));

OP는 구체적으로 카테고리 ID를 사용하여 제품을 가져 오도록 요청했지만 도움이되었으므로 어쨌든 찬성합니다. 원래 질문에 대한 답변이 아님을 명심하십시오
dKen

2

아이디 또는 이름 또는 슬러그로 카테고리 (카테고리-슬러그-이름) 변경

<?php

$args = array( 'post_type' => 'product', 'stock' => 1, 'posts_per_page' => 2,'product_cat' => 'category-slug-name', 'orderby' =>'date','order' => 'ASC' );
  $loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
global $product; 
?>
Within loop we can fetch Product image, title, description, price etc. 

<?phpendwhile;wp_reset_query(); ?>

2

조금 늦었지만 내용을 명확하게하고보다 명확한 답변을 제공하고자합니다. 사용자 @ benz001은 가능한 유효한 대답을 주었지만 잘못된 말을했습니다. get_posts모든 종류의 포스트 유형을 기본값으로 postspost 유형으로 반환합니다 WP_Query. 이 둘의 실제 차이점은 여기 훌륭하게 설명되어 있습니다.

실제로 OP에는 $args배열 에 대한 일부 매개 변수가 누락되었습니다 .

  • 그가 찾고있는 포스트 타입의 정의 :

        'post_type'             => 'product',
  • 그리고 검색어의 "taxonomy part"수정 :

        'tax_query' => array(
            array(
                'taxonomy' => 'product_cat',
                'terms' => 26,
                'operator' => 'IN',
            )
        )

이렇게하면 다음 줄

$products = new WP_Query($args);
var_dump($products);

필요한 제품을 보여줄 것입니다 :)

@ benz001에 의해 표시된 다른 모든 추가 매개 변수는 물론 유효하지만 OP는 요청하지 않으므로이 답변에 남겨두기로 결정했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.