Obter a lista de produtos de uma identificação de categoria determinada

Não consegui encontrar o caminho certo para obter a lista de todos os produtos para uma ID de categoria determinada (não o nome da categoria).

O código que estou usando para obter a lista de categorias é o seguinte, ele funciona bem:

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

No entanto, agora para uma identificação de categoria determinada (digamos 47), não consegui encontrar o caminho para obter seus produtos relevantes. Eu tentei o seguinte caminho:

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

A debugging da matriz de $products retorna sempre 0, o que é errado, pois eu sei que existem alguns produtos na categoria com ID 47. Alguma idéia de como consertar meu código?

Solutions Collecting From Web of "Obter a lista de produtos de uma identificação de categoria determinada"

Eu suspeito que o principal problema é que você deveria estar usando o object WP_Query vez de get_posts() . O posterior, por padrão, apenas retorna itens com um tipo de post de post não produtos,

Assim, dada uma categoria com ID 26, o seguinte código retornaria seus produtos (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); 

Nas versões anteriores do WooCommerce, a visibilidade foi armazenada como um meta-campo, então o código seria:

  $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); 

Aqui estamos apenas retornando produtos visíveis, 12 por página.

Dê uma olhada em http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters para obter mais detalhes sobre como a segmentação por categoria funciona – muitas vezes é mais útil recuperá-lo por slug do que por ID!

alterar categoria (categoria-slug-name) por id ou nome ou 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(); ?> 

Um pouco atrasado, mas gostaria de esclarecer as coisas e fornecer uma resposta mais limpa. O usuário @ benz001 deu uma possível resposta válida, mas disse algo errado: get_posts retorna qualquer tipo de pós-tipos, inadimplente para posts post-type, como WP_Query . As diferenças reais entre os dois são maravilhosamente explicadas AQUI .

O fato é que o OP simplesmente estava faltando alguns parâmetros na matriz $args :

  • A definição do pós-tipo que ele está procurando:

      'post_type' => 'product', 
  • E a modificação da “parte da taxonomia” da consulta de pesquisa:

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

Desta forma, suas próximas linhas

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

Mostrará os produtos necessários 🙂

Todos os outros parâmetros adicionais mostrados por @ benz001 são, naturalmente, válidos, mas não solicitados pelo OP, então eu decidi deixá-los para trás nesta resposta.