Obtenir la liste de produits d'un ID de catégorie donné
-
-
`category` ou`product_category`?`category` or `product_category`?
- 1
- 2014-05-14
- fuxia
-
4 réponses
- votes
-
- 2014-06-02
Je soupçonne que leproblèmeprincipalest que vous devriez utiliser l'objet
WP_Query
plutôt queget_posts()
. Le dernierpar défautne renvoie que les articles avec unpost_type depost
et non desproduits,Donc,étant donné une catégorie avec l'ID 26,le code suivant renverrait sesproduits (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);
Dans les versions antérieures de WooCommerce,la visibilité était stockée sousforme de champméta,le code serait donc:
$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);
Ici,nousne renvoyons que lesproduits visibles,12parpage.
Jetez un œil à http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters pourplus de détails sur lefonctionnement du ciblagepar catégorie -ilest souventplus utile de le récupérerpar slug quepar 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 solution afonctionné.Belleexplication.Solution worked. Nice explanation.
- 0
- 2015-07-10
- Kamesh Jungi
-
Àpartir de Woocommerce 3,la visibilitéest changéeen taxonomie au lieu demeta,vous devez donc changer lameta_queryen tax_query.Voir 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
-
Votre conclusion sur `get_posts ()`estfausse.Vouspouvez remplacer `new WP_Query ($ args)`par `get_posts ($ args)` dans votre codeet celafonctionnera.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 a spécifiquement demandé à obtenir desproduitsen utilisant unidentifiant de catégorie,cependant,celam'a aidé,doncje voterai quandmême.Sachez simplement que celane répondpas à la questioninitialeOP 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
changer de catégorie (nom-slug-catégorie)paridentifiant,nom 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
Unpeutard,maisj'aimerais clarifier les choseset fournir une réponseplus claire. L'utilisateur @benz001 a donné unepossible réponse valide,mais a dit quelque chose demal:
get_posts
renvoietouttype depost-types,par défaut àposts
post-type,tout commeWP_Query
. Les vraies différencesentre les deux sontmerveilleusementexpliquées ICI .Lefaitest que l'OPmanquait simplement certainsparamètres dans letableau
$args
:-
La définition dupost-type qu'il recherche:
'post_type' => 'product',
-
Et lamodification de la "partietaxonomie" de la requête de recherche:
'tax_query' => array( array( 'taxonomy' => 'product_cat', 'terms' => 26, 'operator' => 'IN', ) )
De cettefaçon,vosprochaines lignes
$products = new WP_Query($args); var_dump($products);
Vousmontrera lesproduitsnécessaires :)
Tous les autresparamètres supplémentaires affichéspar @benz001 sontbien sûr validesmaisnon demandéspar l'OP,j'ai donc décidé de les laisser derrière dans cette réponse.
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.
Jen'aipastrouvé lebonmoyen d'obtenir la liste detous lesproduitspour unidentifiant de catégorie donné (pas lenom de catégorie).
Le code quej'utilisepour obtenir la liste des catégoriesest le suivant,celafonctionnetrèsbien:
Cependant,maintenantpour unidentifiant de catégorie donné (disons 47),je n'aipastrouvé lemoyen d'obtenir sesproduitspertinents. J'aiessayé lamanière suivante:
Le débogage dutableau
$products
renvoietoujours 0,ce quiestfaux carje sais qu'il y a desproduits dans la catégorie avec l'ID 47. Desidéespour corrigermon code?