Ottieni l'elenco dei prodotti di un dato ID categoria
-
-
`category` o`product_category`?`category` or `product_category`?
- 1
- 2014-05-14
- fuxia
-
4 risposta
- voti
-
- 2014-06-02
Sospetto cheilproblemaprincipale sia che dovresti usare l'oggetto
WP_Query
invece diget_posts()
. L'ultima,perimpostazionepredefinita,restituisce sologli articoli con unpost_type dipost
e noni prodotti,Quindi,data una categoria con ID 26,il codice seguente restituirài suoiprodotti (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);
Nelle versioniprecedenti di WooCommerce la visibilitàeramemorizzata come unmetacampo,quindiil codice sarebbe:
$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);
Qui restituiamo soloprodotti visibili,12perpagina.
Dai un'occhiata a http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters permaggiori dettagli su comefunzionailtargetingper categoria: spesso èpiù utile recuperarloper slug cheper 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 soluzione hafunzionato.Bella spiegazione.Solution worked. Nice explanation.
- 0
- 2015-07-10
- Kamesh Jungi
-
Apartire da Woocommerce 3,la visibilità vienemodificatain tassonomia anzichéin meta,quindi ènecessariomodificaremeta_queryin tax_query.Vedi 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
-
Latua conclusione su "get_posts ()" è sbagliata.Puoi sostituire `new WP_Query ($ args)` con `get_posts ($ args)`neltuo codicee funzionerà.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 ha chiesto specificamente di ottenereprodotti utilizzando un ID categoria,tuttavia,questomi ha aiutato,quindi voterò comunque.Bastaessere consapevoli chenon risponde alla domanda originaleOP 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
cambia la categoria (category-slug-name)perid onome 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
Unpo 'in ritardo,ma vorrei chiarire le cosee fornire una rispostapiù chiara. L'utente @benz001 hafornito unapossibile risposta valida,ma ha detto qualcosa di sbagliato:
get_posts
restituisce qualsiasitipo dipost-type,perimpostazionepredefinitaposts
post-type,proprio comeWP_Query
. Le vere differenzetrai due sonomeravigliosamente spiegate QUI .Ilfatto è che all'OPmancavano semplicemente alcuniparametrinell'array
$args
:-
La definizione delpost-tipo che sta cercando:
'post_type' => 'product',
-
E lamodifica della "partetassonomia" della query di ricerca:
'tax_query' => array( array( 'taxonomy' => 'product_cat', 'terms' => 26, 'operator' => 'IN', ) )
In questomodo letueprossime righe
$products = new WP_Query($args); var_dump($products);
Timostrerài prodottinecessari :)
Tuttigli altriparametri aggiuntivimostrati da @benz001 sono ovviamente validimanon richiesti dall'OP,quindi ho deciso di lasciarliindietroin questa risposta.
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.
Non sono riuscito atrovareilmodogiustoper ottenere l'elenco dituttii prodottiper un determinato ID categoria (nonilnome della categoria).
Il codice che sto usandoper ottenere l'elenco delle categorie èil seguente,funzionabene:
Tuttavia,oraper un dato ID categoria (diciamo 47),non sono riuscito atrovareilmodoper ottenerei suoiprodottipertinenti. Hoprovatoin questomodo:
Il debug dell'array
$products
restituisce sempre 0,il che è sbagliatopoiché so che ci sono alcuniprodottinella categoria con ID 47. Qualcheidea su come correggereilmio codice?