Obtenha a lista de produtos de uma identificação de categoria dada
-
-
`categoria` ou`product_category`?`category` or `product_category`?
- 1
- 2014-05-14
- fuxia
-
4 respostas
- votos
-
- 2014-06-02
Eu suspeito que oproblemaprincipal é que você deve usar o objeto
WP_Query
em vez deget_posts()
. Quantomaistarde,porpadrão,apenas retornaitens com umpost_type depost
nãoprodutos,Então,dada uma categoria com ID 26,o código a seguir retornaria seusprodutos (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);
Em versões anteriores do WooCommerce,a visibilidadefoi armazenada como um campo demeta,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);
Aquiestamos apenas devolvendoprodutos visíveis,12porpágina.
Dê uma olhada através de http://codex.wordpresspress.org/class_reference/wp_query#taxonomy_parameters Paramais detalhes sobre como a categoria segmentandofunciona -muitas vezes émais útilpara recuperá-lopela SLUG do quepor ID!
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!
-
Soluçãofuncionou.Explicação agradável.Solution worked. Nice explanation.
- 0
- 2015-07-10
- Kamesh Jungi
-
Apartir do WooCommerce 3,a visibilidade é alteradaparataxonomiaem vez demetapara que vocêprecise alterar o Meta_Querypara Tax_Query.Veja 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
-
Sua conclusão sobre "get_posts ()"estáerrado.Vocêpode substituir `novo wp_query ($ args)` com `get_posts ($ args)`no seu códigoe funcionará.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
-
-
OPespecificamente solicitadopara obterprodutos usando um ID da categoria,noentanto,issome ajudou,entãoeu vou upvote de qualquermaneira.Apenasesteja ciente de quenão responde apergunta originalOP 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
Alterar categoria (nome de seleção de categoria)por ID ounome 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(); ?>
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
Umpouco atrasado,masgostaria deesclarecer as coisase fornecer uma respostamais limpa. User @benz001 deu umapossível resposta válida,mas disse algoerrado:
get_posts
retorna qualquertipo depost-tipos,inadimplenteparaposts
tipopós-tipo,assim comoWP_Query
. As reais diferençasentre os dois sãomaravilhosamenteexplicadas aqui .Ofato é que o OPestava simplesmentefaltando algunsparâmetrosno
$args
matriz:-
A definição dotipopós-tipoeleestáprocurando:
'post_type' => 'product',
-
e amodificação da "parte detaxonomia" da consulta depesquisa:
'tax_query' => array( array( 'taxonomy' => 'product_cat', 'terms' => 26, 'operator' => 'IN', ) )
destaforma suaspróximas linhas
$products = new WP_Query($args); var_dump($products);
mostrará osprodutosnecessários :)
Todos os outrosparâmetros adicionaismostradospor @benz001 são,obviamente,válidos,masnão solicitadospelo OP,então decidi deixá-losparatrásnesta resposta.
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.
Eunão conseguiencontrar amaneira certa de obter a lista detodos osprodutospara um determinado ID de categoria (nãonome da categoria).
O código queestou usandopara obter a lista de categorias é o seguinte,funcionabem:
Noentanto,agorapara um determinadoid da categoria (digamos 47),não conseguiencontrar o caminhopara obter seusprodutos relevantes. Eutentei a seguintemaneira:
Depuração do
Produtos $
Array Retorna sempre 0 o queestáerrado,já que sei que há algunsprodutos sob a categoria com ID 47. Algumaidéia como corrigirmeu código?