주어진 카테고리 ID의 제품 목록을 가져옵니다
-
-
`category` 또는`product_category`?`category` or `product_category`?
- 1
- 2014-05-14
- fuxia
-
4 대답
- 투표
-
- 2014-06-02
주요 문제는
WP_Query
대신get_posts()
개체를 사용해야한다는 것입니다. 나중에 기본적으로 제품이 아닌post_type이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 개씩 보이는 제품 만 반환합니다.
I suspect the main problem is that you should be using the
WP_Query
object rather thanget_posts()
. The later by default only returns items with a post_type ofpost
not products,So given a category with ID 26, the following code would return it's products (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);
In earlier versions of WooCommerce the visibility was stored as a meta field, so the code would be:
$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);
Here we are only returning visible products, 12 per page.
Have a look through http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters for more details about how the category targeting works - it's often more useful to retrieve it by slug than by ID!
-
솔루션이 작동했습니다.좋은 설명입니다.Solution worked. Nice explanation.
- 0
- 2015-07-10
- Kamesh Jungi
-
Woocommerce 3부터 가시성이 메타 대신 분류로 변경되었으므로meta_query를tax_query로 변경해야합니다.https://wordpress.stackexchange.com/a/262628/37355를 참조하십시오.As of Woocommerce 3, visibility is changed to taxonomy instead of meta so you need to change the meta_query to tax_query. See https://wordpress.stackexchange.com/a/262628/37355.
- 1
- 2017-10-18
- jarnoan
-
`get_posts ()`에 대한 결론이 잘못되었습니다.코드에서`new WP_Query ($ args)`를`get_posts ($ args)`로 바꿀 수 있으며 작동합니다.Your conclusion about `get_posts()` is wrong. You can replace `new WP_Query($args)` with `get_posts($args)` in your code and it will work.
- 0
- 2018-07-14
- Bjorn
-
-
OP는 특별히 카테고리 ID를 사용하여 제품을 구해달라고 요청했지만 이것이 도움이되었으므로 어쨌든 찬성하겠습니다.원래 질문에 대한 답이 아닙니다.OP specifically asked for getting products using a category ID, however, this helped me, so I'll upvote anyhow. Just be aware it doesn't answer the original question
- 1
- 2019-09-24
- dKen
-
-
- 2015-01-19
ID 또는 이름 또는 슬러그로 카테고리 (카테고리-슬러그-이름) 변경
<?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(); ?>
change category (category-slug-name) by id or name or slug
<?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(); ?>
-
- 2016-11-18
조금 늦었지만 내용을 명확히하고 더 명확한 답변을 제공하고자합니다. 사용자 @benz001이 가능한 유효한 대답을 제공했지만 잘못된 내용을 말했습니다.
get_posts
는WP_Query와 마찬가지로 모든 종류의 포스트 유형을 반환하며 기본값은
. 둘의 실제 차이점은 여기 에서 훌륭하게 설명됩니다.posts
포스트 유형입니다.사실은 OP가
$ args
배열의 일부 매개 변수를 누락 한 것뿐입니다.-
검색하는 포스트 유형의 정의 :
'post_type'=> '생성물',
-
검색어의 "분류 부분"수정 :
'tax_query'=> 정렬( 정렬( '분류'=> 'product_cat', '약관'=> 26, '연산자'=> '에', ) )
다음 라인
$products=new WP_Query ($ args); var_dump ($products);
필요한 제품을 보여줍니다. :)
@benz001이 표시하는 다른 모든 추가 매개 변수는 물론 유효하지만 OP에서 요청하지 않았으므로이 답변에 남겨두기로 결정했습니다.
A bit late, but would like to clarify things and provide a cleaner answer. User @benz001 gave a possible valid answer, but said something wrong:
get_posts
returns any kind of post-types, defaulting toposts
post-type, just likeWP_Query
. The real differences between the two are wonderfully explained HERE.The fact is, the OP was simply missing some parameters into the
$args
array:The definition of the post-type he is searching for:
'post_type' => 'product',
And the modification of the "taxonomy part" of the search query:
'tax_query' => array( array( 'taxonomy' => 'product_cat', 'terms' => 26, 'operator' => 'IN', ) )
This way your next lines
$products = new WP_Query($args); var_dump($products);
Will show you the needed products :)
All other additional parameters shown by @benz001 are of course valid but not requested by the OP, so I decided to leave them behind in this answer.
주어진 카테고리 ID (카테고리 이름 아님)에 대한 모든 제품 목록을 가져 오는 올바른 방법을 찾을 수 없습니다.
카테고리 목록을 가져 오는 데 사용하는 코드는 다음과 같습니다. 정상적으로 작동합니다.
하지만 이제 주어진 카테고리 ID (예 : 47)에 대해 관련 제품을 얻을 수있는 방법을 찾을 수 없습니다. 다음과 같은 방법을 시도했습니다.
$products
배열을 디버깅하면 ID가 47 인 카테고리 아래에 일부 제품이 있다는 것을 알고 있기 때문에 잘못된 것은 항상 0을 반환합니다. 코드를 수정하는 방법에 대한 아이디어가 있습니까?