Obtenga la lista de productos de una ID de categoría determinada
-
-
¿`categoría` o` categoría_producto`?`category` or `product_category`?
- 1
- 2014-05-14
- fuxia
-
4 respuestas
- votos
-
- 2014-06-02
Sospecho queelproblemaprincipales que debería utilizarel objeto
WP_Query
en lugar deget_posts()
. La última,por defecto,solo devuelve artículos con unpost_type depost
noproductos,Entonces,dada una categoría con ID 26,el siguiente código devolvería susproductos (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);
En versiones anteriores de WooCommerce,la visibilidad se almacenaba como unmetacampo,por lo queel código sería:
$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);
Aquí solo devolvemosproductos visibles,12porpágina.
Eche un vistazo a http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters para obtenermás detalles sobre cómofunciona la segmentaciónpor categoría,amenudoesmás útil recuperarlapor slug 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!
-
La soluciónfuncionó.Buenaexplicación.Solution worked. Nice explanation.
- 0
- 2015-07-10
- Kamesh Jungi
-
Apartir de Woocommerce 3,la visibilidad se cambia ataxonomíaen lugar demeta,por lo que debe cambiarmeta_query atax_query.Consulte 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
-
Tu conclusión sobre `get_posts ()`esincorrecta.Puede reemplazar `new WP_Query ($ args)` con `get_posts ($ args)`en su código yfuncionará.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 solicitóespecíficamente obtenerproductos con un ID de categoría,sinembargo,estome ayudó,así que votaré afavor detodosmodos.Soloten en cuenta queno responde a lapregunta original.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
cambie la categoría (categoría-slug-name)porid onombre o 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
Unpocotarde,perome gustaría aclarar las cosas y dar una respuestamás limpia. El usuario @benz001 dio unaposible respuesta válida,pero dijo algoincorrecto:
get_posts
devuelve cualquiertipo depost-type,por defecto aposts
post-type,aligual queWP_Query
. Las diferencias realesentre los dos seexplicanmaravillosamente AQUÍ .El hechoes que al OP simplemente lefaltaban algunosparámetrosen lamatriz
$args
:-
La definición deltipo depublicación queestábuscando:
'post_type' => 'product',
-
Y lamodificación de la "parte detaxonomía" de la consulta debúsqueda:
'tax_query' => array( array( 'taxonomy' => 'product_cat', 'terms' => 26, 'operator' => 'IN', ) )
Deestamanera suspróximas líneas
$products = new WP_Query($args); var_dump($products);
Lemostrará losproductosnecesarios :)
Todos los demásparámetros adicionalesmostradospor @benz001 son,por supuesto,válidosperoel OPno los solicita,así que decidí dejarlosen esta respuesta.
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.
Nopudeencontrar lamanera correcta de obtener la lista detodos losproductospara un ID de categoría determinado (noelnombre de categoría).
El código queestoy usandopara obtener la lista de categoríasesel siguiente,funcionabien:
Sinembargo,ahorapara un ID de categoría determinado (digamos 47),nopudeencontrar lamanera de obtener susproductos relevantes. Intenté de la siguientemanera:
La depuración de lamatriz
$products
devuelve siempre 0,lo cualesincorrecto,ya que sé que hay algunosproductosen la categoría con ID 47. ¿Algunaidea de cómo arreglarmi código?